

Chrome上でHTMLファイルを開いて、PDFに保存するというのをやりたくて、  
下記コードを書きましたが、コード中のappState内の"pageSize"をA3、A5、レターサイズと  
どんなに値を変えて指定しても、出力されたPDFファイルのページサイズがA4となってしまいます。  
appState内の他のプロパティ"isLandscapeEnabled"や"isHeaderFooterEnabled"の値を変えると、出力されたPDFは設定通りになっていて、動いています。  
コントロールパネル→地域→形式(F)を日本に設定した場合は、出力されたPDFファイルのページサイズがずっとA4で、  
米国に設定すると、ずっとレターサイズになってしまいます。

python初心者で、まだほとんど理解できていません。このコードのどこかが悪いでしょうか？  
ご教授をよろしくお願いします。

環境  
Python 3.9.6  
selenium 3.141.0  
Chrome 94.0.4606.71  
ChromeDriver 94.0.4606.61  
windows10

[code]

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    import json
    import time
    
    def PrintSetUp():
        chopt=webdriver.ChromeOptions()
        appState = {
            "recentDestinations": [
                {
                    "id": "Save as PDF",
                    "origin": "local",
                    "account":""
                }
            ],
            "selectedDestinationId": "Save as PDF",
            "version": 2,
            "isLandscapeEnabled": False,
            "pageSize": 'A3', 
            "marginsType": 0,
            "scalingType": 3 , 
            "scaling": "100" ,
            "isHeaderFooterEnabled": False, #ヘッダーとフッター
            "isCssBackgroundEnabled": True, #背景のグラフィック
        }
        
        prefs = {'printing.print_preview_sticky_settings.appState':
                 json.dumps(appState),
                 "download.default_directory": "~/Downloads"
                 }
        chopt.add_experimental_option('prefs', prefs)
        chopt.add_argument('--kiosk-printing')
        return chopt
    
    def main_WebToPDF(BlogURL):
        chopt = PrintSetUp()
        driver_path = "C:/Work/pythonTest/Ver94/chromedriver_win32/chromedriver.exe" #webdriverのパス
        driver = webdriver.Chrome(executable_path=driver_path, options=chopt)
        driver.implicitly_wait(10) # 秒 暗示的待機 
        driver.get(BlogURL) #ブログのURL 読み込み
        WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)  # ページ上のすべての要素が読み込まれるまで待機（15秒でタイムアウト判定）
        driver.execute_script('return window.print()') #Print as PDF
        time.sleep(10) #ファイルのダウンロードのために10秒待機
        driver.quit() #Close Screen
        
    if __name__ == '__main__':
        BlogURLList=["file://C:/Work/pythonTest/1_pdf.html",
                     "file://C:/Work/pythonTest/2_pdf.html",
                     "file://C:/Work/pythonTest/3_pdf.html"]
        for BlogURL in  BlogURLList:
            main_WebToPDF(BlogURL)
    
[/code]


CC BY-SA 4.0
2021-10-06T07:53:59.227
82916
2023-11-19T06:10:54.040
2021-10-06T08:21:18.057
3060
48514
question
python google-chrome selenium
ChromeでHTMLファイルをPDF保存時のページサイズ指定が動作しない


最近、ページサイズ変更ができました。  
A2で印刷する場合には、"mediaSize"に以下のJSONを入力する感じです。

Chromeの印刷画面自体が、HTMLで描画されているので、画面中に右クリックで、「検証」を選択すると、要素が出てきますのでそこを参考にすると、用紙サイズの指定ができると思います。

[code]

    {
        "height_microns":594000,
        "imageable_area_bottom_microns":0,
        "imageable_area_left_microns":0,
        "imageable_area_right_microns":420000,
        "imageable_area_top_microns":594000,
        "name":"ISO_A2",
        "width_microns":420000,
        "custom_display_name":"A2"
    }
    
[/code]


CC BY-SA 4.0
2023-11-18T12:21:51.477
96820
2023-11-19T06:10:54.040
2023-11-19T06:10:54.040
3060
60457
82916
answer