VBA와 PDFFCreator에 의한 PDF 출력 정보

소개



일상 여러가지 있었으므로 시행착오했기 때문에 비망록으로서 남깁니다. (일본어 레퍼런스가 없기 때문에)
아마도 이런 것을 사용하는 것은 거의 없을 것 같지만, 만약 누군가의 도움이 된다고 생각해 이 엔트리를 작성했습니다.

이번 이야기는, Excel에서의 이야기로 하겠습니다만, 아마 다른 Word등에서도 똑같이 사용할 수 있을까 생각합니다.

덧붙여서, 여기에서는 소개하지 않지만, Windows 10부터 탑재되고 있는 가상 프린터 「Microsoft Print to PDF」나 Office 소프트 내에는 PDF로 보존하는 기능이 있으므로, 그쪽에서 문제 없으면 그쪽을 사용하는 편이 현명 입니다.

이런 사람에게 추천


  • 현재 Office의 PDF 저장 기능이 평범하고 다른 것을 찾고있는 사람
  • PDF 저장시 깨끗하게 사진이 나오지 않아 곤란한 사람
  • 가상 프린터를 통해 PDF를 출력 할 수있게하려는 사람

  • 전제 조건



    시작하기 전에 다음 소프트웨어 설치 및 참조 설정이 필요합니다.
  • PDFCreator ( htps //w w. pd 푹신. rg/ ) 안에 PDFFCreator (Free로 OK)를 설치
  • 설치 후 참조 설정에서 "PDFCreator_COM"을 확인하십시오 (잘 모르는 경우 확인하십시오).

    이런 느낌으로 체크를 넣어 주면 움직입니다.

  • Excel 등을 연 후 프린터를 PDFFCreator로 변경한다. (변경하지 않으면 움직이지 않는 것은 물론, 일반 프린터에서 출력됩니다.)

  • PDF 출력 방법



    여기까지 오면 순식간입니다.
    이것을 복사하십시오.
    
    Sub PDF_Output()
        Const JobTimeout As Integer = 15
        Const PDF_DPI As Integer = 300
        Const PDF_CompLevel As String = "JpegMedium"
        Const DistPath As String = "C:\Tmp\TestPDF.pdf"
        Dim PDFCreatorQueue As Queue
        Dim PrintJob As PrintJob
    
        Set PDFCreatorQueue = CreateObject("PDFCreator.JobQueue")
    
        'ここでPDFCreatorを選択する
        Application.Dialogs(xlDialogPrinterSetup).Show
    
        PDFCreatorQueue.Initialize
    
        ActiveWindow.SelectedSheets.PrintOut _
          Copies:=1, _
          Collate:=True
    
        If Not PDFCreatorQueue.WaitForJob(JobTimeout) Then
          MsgBox ("印刷ジョブが見つからない為、PDF出力されません。")
        Else
          Set PrintJob = PDFCreatorQueue.NextJob
          PrintJob.SetProfileByGuid ("DefaultGuid")
    
          'Compressionなどについて
          'ここで画像の圧縮率を変更…JpegMaximum(高圧縮)→JpegMinimum(低圧縮)
    
          '写真圧縮の明示
          Call PrintJob.SetProfileSetting("PdfSettings.CompressColorAndGray.Enabled", "True")
    
          '写真リサンプリングの明示
          Call PrintJob.SetProfileSetting("PdfSettings.CompressColorAndGray.Resampling", "True")
    
          '写真のリサンプリング設定(DPI 300)
          Call PrintJob.SetProfileSetting("PdfSettings.CompressColorAndGray.Dpi", PDF_DPI)
    
          '写真の圧縮は中圧縮設定
          Call PrintJob.SetProfileSetting("PdfSettings.CompressColorAndGray.Compression", PDF_CompLevel)
    
          PrintJob.ConvertTo (DistPath)
    
          If (Not PrintJob.IsFinished Or Not PrintJob.IsSuccessful) Then
              MsgBox ("次のファイルがPDF出力できませんでした。: " & DistPath)
          End If
        End If
    
        MsgBox ("オブジェクトをリリースします。")
    
        PDFCreatorQueue.ReleaseCom
    
    End Sub
    
    

    이런 느낌입니다.

    여러가지 쓰고 있습니다만, 이하만이 필요합니다.
  • CreateObject로 객체를 생성한다.
  • 객체를 Initialize한다.
  • 뭔가 PDFFCreator로 인쇄를 한다. (그렇게하면 대기열에 쌓입니다)
  • WaitForJob에서 작업을 기다립니다. (인수는 int로 타임 아웃 시간)
  • 작업이 있으면 NextJob에서 작업 설정
  • SetProfileByGuid에서 프로파일을 지정합니다. (여기서 PDF 또는 JPEG로 프로파일 설정)
  • ConvertTo에서 출력 경로로 출력합니다.
  • ReleaseCom에서 COM을 놓습니다

  • 간단하네요.
    덧붙여서, 여러가지 조사하면 Merge등도 할 수 있는 것 같네요. 편리합니다.

    참고



    참고할 수 있는 사이트도 적습니다만, 공식의 레퍼런스만 보면 어떻게든 할 수 있을까 생각합니다.
    그리고, 설치한 폴더 내에 다른 샘플도 있으므로 그것을 참고로 하는 것도 좋을까 생각합니다.
  • htp // // cs. pd 푹신. 오 rg / pdfc 레드 r / 아 st / 엔 / pdfc 레오 r / 코 m 어서 r
  • htp // // cs. pd 푹신. 오 rg / pdfc 레드 r / ㅁ st / 엔 / pdfc 레드 r / 코 m 어서 r 후세 / 레후 렌세 / 세친 gs /
  • 좋은 웹페이지 즐겨찾기