PDF in batch omzetten naar PDF/A

Pagina: 1
Acties:

  • luuksnijmegen
  • Registratie: Oktober 2009
  • Laatst online: 05-11 22:28
Hi,

Het doel is om een groot aantal PDF bestanden iedere dag om te zetten naar PDF/A, zonder dure programma's. Op dit moment gebeurt het per bestand handmatig en het zijn zo'n 100 bestanden per dag.

Het volgende is reeds gelukt: via ghostscript de PDF omzetten naar PDF/A. Hierbij moet ik echter via een cmd-prompt zelf nog de bestandsnaam ingeven. Op internet vond ik een link om in het windows "Send-To" menu een link naar GhostScript te plaatsen. (link: https://www.mcbsys.com/bl...ent-page-1/#comment-62072)

Resultaat is helaas niet als gewenst, een schermpje opent en sluit weer snel en de PDF is niet omgezet. Weet iemand een goede oplossing om PDFs makkelijk in batch om te zetten naar PDF/A? Wellicht via GhostScript, andere oplossing is ook welkom. Het liefst een beetje "leek-proof).

Ik heb meerdere manieren met meerdere PDF writers geprobeerd, maar geen geeft het gewenste resultaat. Of er zit een dure licentie aan vast, of het lijken mij geen fijne programmas; er zitten bijvoorbeeld teveel vinkjes voor adware in het installatie programma.

  • GNID
  • Registratie: Januari 2005
  • Niet online
Als je al iets hebt waarbij je op de CMD prompt alleen nog maar de bestandsnaam hoeft op te geven, heb je al 80 tot 90% gerealiseerd van wat je wilde.

Post hier hoe je dit doet met GhostScript (welk commando), dan kan dat laatste stukje er ook nog wel aangebreid worden.

Vermeld er dan ook bij waar de files vandaan komen (invoer), waar de omgezette bestanden geplaatst moeten worden en wat er met de originele bestanden moet gebeuren.

[ Voor 23% gewijzigd door GNID op 15-08-2017 21:27 ]


  • Switchie
  • Registratie: April 2009
  • Niet online

Switchie

Mr. Evil Genius

Je kunt in cmd toch gewoon filenames oproepen? Gebruik deze als basis voor de nieuwe extensie en je bent klaar

'Future proof' (de; v) Verschijnsel waarbij men een dure aankoop rechtvaardigt door innovatie te negeren


  • luuksnijmegen
  • Registratie: Oktober 2009
  • Laatst online: 05-11 22:28
Ik zal morgen de code posten, op dit moment niet in de buurt van de laptop. Code die ik nu heb kan via de Sent To functionaliteit 5 bestanden omzetten. Wat vooral nog mist is een loop zodat zoveel bestanden als je wilt omgezet kunnen worden, en een aan te geven output map, nu komt alles met een andere naam in dezelfde map. Wellicht hebben jullie daar ideeën over als ik de code post.

Andere oplossingen mogen natuurlijk ook (inputmap met pdf, en en scheduler oid die alles omzet en verplaatst). Ik ben zelf nog niet zo sterk in programmeren

  • luuksnijmegen
  • Registratie: Oktober 2009
  • Laatst online: 05-11 22:28
Hierbij de code die ik nu gebruik. Er zit nog vanalles in wat ik niet gebruik zoals Bookmarks, ik moet hem later opschonen. Via Sent To wordt deze aangeroepen; ik kan 5 PDFs tegelijk omzetten (door slecht copy-paste werk). Kan iemand mij helpen een loopje erin bouwen zodat ik geen max van 5 heb, en daarnaast zorgen dat de nieuwe PDFs in een andere map komen? Ik ben bezig geweest met de "-o" parameter, maar ik krijg het niet voor elkaar de PDFs in een nieuwe map op te slaan.

@echo off
REM ===========================================================================================
REM pdfa.cmd
REM Copyright 2017 by MCB Systems.
REM Free for personal and commercial use. No warranties. May not be sold.
REM ===========================================================================================
REM
REM Summary:
REM Renames input files to .old.pdf, and puts output file in the same folder
REM as the input file(s). Optionally displays Bookmarks panel by default.
REM
REM Parameters:
REM %1: Mandatory. PDF file to convert. Will be used for output file name.
REM %2: Optional. PDF file to convert. Will be combined into one output.
REM %4: Optional. PDF file to convert. Will be combined into one output.
REM %4: Optional. PDF file to convert. Will be combined into one output.
REM %5: Optional. PDF file to convert. Will be combined into one output.
REM
REM Alternately, set the last parameter to "-sb" (show bookmarks) to load a file that
REM sets the Initial View of the PDF to show the Bookmarks (outline) panel. This is only
REM useful if the input file already has bookmarks, and does not really make sense when
REM concatenating multiple files, as bookmarks from later files would point to incorrect
REM page numbers.
REM
REM Dependencies:
REM gswin32c.exe - Ghostscript command-line program. Update the first
REM line below "set gs_path=", with the path where gswin32c.exe
REM is found.
REM C:\GS_PDFA\PDFA_def.ps - PDF/A conversion info. Includes additional dependency on
REM ICC color profile (e.g. C:\GS_PDFA\AdobeRGB1998.icc).
REM C:\GS_PDFA\PDF_ShowBookmarksPanel.ps - Command to cause bookmarks panel to be displayed.
REM
REM ===========================================================================================
REM Change Log:
REM
REM 04/15/2013 Initial batch file.
REM
REM 05/03/2013 Fix to support spaces in file names.
REM
REM 07/02/2014 Enhance to work from Explorer Send To context menu:
REM - Strip file extension from parameters if provided. Script assumes .pdf.
REM - Change to the directory of the first file before processing.
REM - Pause if file rename fails on file 1 so user can see error in command window.
REM
REM 01/02/2015 Handle ampersands in file names (e.g. "AT&T") by quoting set statements.
REM
REM 11/22/2016 After re-installing Windows 10, I installed Ghostscritp 9.20 instead of 9.07.
REM Update gs_path just below accordingly.
REM
REM 08/15/2017 Pause if rename fails on files 2-5 so user can see error in command window.
REM
REM ===========================================================================================

REM ===========================================================================================
REM Check for the Ghostscript executable
REM ===========================================================================================

REM Change the next line to the folder that contains gswin32c.exe. End the line with a backslash (\):
set gs_path=C:\Program Files (x86)\gs\gs9.21\bin\
REM On a 32-bit version of Windows, gswin32c.exe will probably be here:
REM set gs_path=C:\Program Files\gs\gs9.20\bin\

if not exist "%gs_path%gswin32c.exe" (
echo "%gs_path%gswin32c.exe" not found. Exiting.
goto End
)

REM ===========================================================================================
REM Check for parameters
REM ===========================================================================================

if ###%1###==###### goto NoParam
goto ParamsFound

:NoParam
echo.
echo Missing parameter(s)
echo.
echo Usage: pdfa file1 [file2^|-sb] [file3^|-sb] [file4^|-sb] [file5^|-sb]
echo.
echo You do NOT need to specify the .pdf extension on the input parameters.
echo.
echo To set the Initial View of the PDF to show the Bookmarks (outline) panel,
echo set the last parameter to "-sb" (show bookmarks). The input file must
echo already contain bookmarks. Not recommended when concatenating files.
echo.
echo Usage examples:
echo.
echo 1. If you have a credit card statement with two reconciliation
echo reports to attach, use the following command:
echo.
echo pdfa CCstatement recon1 recon2
echo.
echo Output:
echo CCstatement.pdf
echo CCstatement.old.pdf
echo recon1.old.pdf
echo recon2.old.pdf
echo.
echo 2. Convert a tax return that includes bookmarks:
echo.
echo pdfa "Tax Return" -sb
echo.
echo Output:
echo Tax Return.pdf
echo Tax Return.old.pdf
echo.
echo Delete the .old files if you are satisfied with the new PDF/A document.
echo.
goto End

:ParamsFound
REM Expand params and strip surrounding quotation marks, if any.
REM Also, strip extension, if any, and leave file name only. (.pdf will be assumed below.)
REM 01/02/2015 Handle ampersands in file names (e.g. "AT&T") by quoting set statements.
REM See http://stackoverflow.com/a/14108765/550712. Did not have to use
REM "setlocal enableDelayedExpansion" or change references to use exclamation points.
set "file1=%~n1"
set "file2=%~n2"
set "file3=%~n3"
set "file4=%~n4"
set "file5=%~n5"

REM ===========================================================================================
REM Before renaming any files, check that all specified input files exist
REM ===========================================================================================

set ShowBookmarksPanel=N

REM Go to the path of the first file. Needed when called from Explorer Send To context menu.
set File1Drive=%~d1
set File1Path=%~p1
cd /d %File1Drive%\%File1Path%

REM First parameter always exists (checked above)
if not exist "%file1%.pdf" (
echo File #1 "%file1%.pdf" not found. Exiting.
REM When called from Explorer Send To, need a "pause" to see error
pause
goto End
)
REM If the next parameter doesn't exist, skip to renaming files.
if ###%2###==###### goto RenameFiles
REM If the next parameter is "-sb" (ShowBookmarks), skip to renaming files.
if "%file2%"=="-sb" goto ShowBookmarksAndRenameFiles
if not exist "%file2%.pdf" (
echo File #2 "%file2%.pdf" not found. Exiting.
pause
goto End
)
if ###%3###==###### goto RenameFiles
if "%file3%"=="-sb" goto ShowBookmarksAndRenameFiles
if not exist "%file3%.pdf" (
echo File #3 "%file3%.pdf" not found. Exiting.
pause
goto End
)
if ###%4###==###### goto RenameFiles
if "%file4%"=="-sb" goto ShowBookmarksAndRenameFiles
if not exist "%file4%.pdf" (
echo File #4 "%file4%.pdf" not found. Exiting.
pause
goto End
)
if ###%5###==###### goto RenameFiles
if "%file5%"=="-sb" goto ShowBookmarksAndRenameFiles
if not exist "%file5%.pdf" (
echo File #5 "%file5%.pdf" not found. Exiting.
pause
goto End
)

REM ===========================================================================================
REM Rename input file(s) to .old.pdf and build a list of input files.
REM Optionally set flag to show the Bookmarks panel
REM ===========================================================================================

:ShowBookmarksAndRenameFiles
set ShowBookmarksPanel=Y

:RenameFiles

REM First parameter always exists (checked above)
echo ren "%file1%.pdf" "%file1%.old.pdf"
ren "%file1%.pdf" "%file1%.old.pdf"
if errorlevel 1 goto RenameFailed
set inputfilelist="%file1%.old.pdf"

"%gs_path%\gswin32c" ^
-dPDFA ^
-dNOOUTERSAVE ^
-sProcessColorModel=DeviceRGB ^
-sDEVICE=pdfwrite ^
-o "%file1%.pdf" ^
-dPDFACompatibilityPolicy=1 ^
"C:\GS_PDFA\PDFA_def.ps" ^
%inputfilelist%

REM If the next parameter doesn't exist, skip to converting files.
if ###%2###==###### goto ConvertFiles
REM If the next parameter is "-sb" (ShowBookmarks), skip to converting files.
if "%file2%"=="-sb" goto ConvertFiles
echo ren "%file2%.pdf" "%file2%.old.pdf"
ren "%file2%.pdf" "%file2%.old.pdf"
if errorlevel 1 goto RenameFailed
set inputfilelist="%file2%.old.pdf"

"%gs_path%\gswin32c" ^
-dPDFA ^
-dNOOUTERSAVE ^
-sProcessColorModel=DeviceRGB ^
-sDEVICE=pdfwrite ^
-o "%file2%.pdf" ^
-dPDFACompatibilityPolicy=1 ^
"C:\GS_PDFA\PDFA_def.ps" ^
%inputfilelist%

REM If the next parameter doesn't exist, skip to converting files.
if ###%3###==###### goto ConvertFiles
REM If the next parameter is "-sb" (ShowBookmarks), skip to converting files.
if "%file3%"=="-sb" goto ConvertFiles
echo ren "%file3%.pdf" "%file3%.old.pdf"
ren "%file3%.pdf" "%file3%.old.pdf"
if errorlevel 1 goto RenameFailed
set inputfilelist="%file3%.old.pdf"

"%gs_path%\gswin32c" ^
-dPDFA ^
-dNOOUTERSAVE ^
-sProcessColorModel=DeviceRGB ^
-sDEVICE=pdfwrite ^
-o "%file3%.pdf" ^
-dPDFACompatibilityPolicy=1 ^
"C:\GS_PDFA\PDFA_

REM If the next parameter doesn't exist, skip to converting files.
if ###%4###==###### goto ConvertFiles
REM If the next parameter is "-sb" (ShowBookmarks), skip to converting files.
if "%file4%"=="-sb" goto ConvertFiles
echo ren "%file4%.pdf" "%file4%.old.pdf"
ren "%file4%.pdf" "%file4%.old.pdf"
if errorlevel 1 goto RenameFailed
set inputfilelist="%file4%.old.pdf"

"%gs_path%\gswin32c" ^
-dPDFA ^
-dNOOUTERSAVE ^
-sProcessColorModel=DeviceRGB ^
-sDEVICE=pdfwrite ^
-o "%file4%.pdf" ^
-dPDFACompatibilityPolicy=1 ^
"C:\GS_PDFA\PDFA_

REM If the next parameter doesn't exist, skip to converting files.
if ###%5##==###### goto ConvertFiles
REM If the next parameter is "-sb" (ShowBookmarks), skip to converting files.
if "%file5%"=="-sb" goto ConvertFiles
echo ren "%file5%.pdf" "%file5%.old.pdf"
ren "%file5%.pdf" "%file5%.old.pdf"
if errorlevel 1 goto RenameFailed
set inputfilelist="%file5%.old.pdf"
REM set outputfilepath=%C:\temp\%

"%gs_path%\gswin32c" ^
-dPDFA ^
-dNOOUTERSAVE ^
-sProcessColorModel=DeviceRGB ^
-sDEVICE=pdfwrite ^
-o "%file5%.pdf" ^
-dPDFACompatibilityPolicy=1 ^
"C:\GS_PDFA\PDFA_def.ps" ^
%inputfilelist%


REM ===========================================================================================
REM Convert input file(s) to PDF/A.
REM ===========================================================================================

:ConvertFiles

REM If the last parameter was "-sb" (ShowBookmarks), add the appropriate file to the file list
if %ShowBookmarksPanel%==Y (
set inputfilelist=%inputfilelist% "C:\GS_PDFA\PDF_ShowBookmarksPanel.ps"
)

REM Convert to PDF/A. Use name of first input file as name of output file.


REM ===========================================================================================
REM Open converted PDF/A file with the default PDF reader.
REM ===========================================================================================

REM The leading "title" (empty here) is necessary to get START to interpret parameters correctly
REM start "" /b "%file1%.pdf"
goto End

:RenameFailed
echo Exiting without converting because renaming an input file to .old failed.
REM Pause so user can see message (in case called from Explorer Send To context menu)
pause

:End
REM pause

  • Squ1zZy
  • Registratie: April 2011
  • Niet online
50% is REM en stap a.u.b. over naar PowerShell!

  • ThunderNet
  • Registratie: Juni 2004
  • Laatst online: 18-11 15:39

ThunderNet

Flits!

Dit kan gewoon in Adobe Acrobat?

Heb je liever vooraf, of achteraf, dat ik zeg dat ik geen flauw idee heb wat ik doe?


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Zet het cmd bestand eens even in code-tags, maakt het makkelijker leesbaar.

  • GNID
  • Registratie: Januari 2005
  • Niet online
Dat script kan nooit goed werken!
Als je 5 bestanden opgeeft, worden bestand 3 en 4 niet omgezet.
In het originele script (waar verder weinig aan veranderd is) worden meerdere PDF bestanden samengevoegd tot 1 bestand. Ook in dat originele bestand zitten fouten, trouwens.


Je geeft niet aan waar de bestanden staan die op de "lopende band" geplaatst moeten worden en waar de omgezette bestanden moeten landen.
De plek daarvan is vooral organisatorisch bepaald. Technisch zijn er in dat opzicht nauwelijks belemmeringen.

Dit wordt dus een losstaand "lopend bandje"....
- Sla script ergens op je systeem op. (Op mijn systeem heb ik het PDF_PDFA.cmd genoemd)
- Maak een folder aan waar de omgezette PDF/A's gaan komen
- Plaats de oude PDF's in een andere fodler
- Pas de paden in het script aan (onder INSTELLINGEN)
- Start het script.
Alle PDF bestanden in %INFOLDER% worden nu omgezet. Omgezette bestanden staan nu in %UITFOLDER%
(niet getest overigens; zorg dat je eerst werkt met een test-set )

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@echo off
setlocal
::____________________________________________
::
::  INSTELLINGEN
::____________________________________________
::
    set INFOLDER=C:\Temp\IN
    set UITFOLDER=C:\Temp\UIT
    set GHOSTSCRIPT=C:\Program Files (x86)\gs\gs9.20\bin\gswin32c.exe
    set DEF_FILE=C:\GS_PDFA\PDFA_def.ps


::____________________________________________
::
::  INIT
::____________________________________________
::
    :: check GS
    if not exist "%GHOSTSCRIPT%" (echo    "%GHOSTSCRIPT%" niet gevonden & goto :EOF )
    if not exist "%DEF_FILE%" (echo    "%DEF_FILE%" niet gevonden & goto :EOF )
    
   
::____________________________________________
::
::  ACTIE
::____________________________________________
::
    for %%A in ("%INFOLDER%\*.pdf") DO call :DEZEFILE "%%A"
goto :EOF


   
::############################################
::
::  SUBROUTINES
::
::############################################
::


::============================================
:DEZEFILE
::============================================

    echo === "%~nx1"
    :: Als al omgezet: klaar; op naar de volgende
    if exist "%UITFOLDER%\%~nx1" (echo.    Al gedaan & goto :EOF )

    :: Voer conversie uit
    start /WAIT  "PDF 2 PDFA" "%GHOSTSCRIPT%"  ^
      -dPDFA ^
      -dNOOUTERSAVE ^
      -sProcessColorModel=DeviceRGB ^
      -dUseCIEColor ^
      -sDEVICE=pdfwrite ^
      -o "%UITFOLDER%\%~nx1" ^
      -dPDFACompatibilityPolicy=1 ^
       "%DEF_FILE%" ^
       %1

    echo.    Ctrl-C om verwerking van verdere PDF's af te breken.
    timeout /t 3
    echo.
goto :EOF

  • luuksnijmegen
  • Registratie: Oktober 2009
  • Laatst online: 05-11 22:28
@ThunderNet Thundernet; dit kan inderdaad in Adobe, maar niet de versie die hier draait.
@Squ1zZy ; klopt, hij moet nog worden opgeschoond. Het is een script gevonden op internet.
@GNID ; bedankt! Ik ga hem testen.

  • luuksnijmegen
  • Registratie: Oktober 2009
  • Laatst online: 05-11 22:28
@GNID Zodra ik het cmd bestand start, opent het schermpje en sluit weer snel. Ik heb een pause in het script geplaats; maar alles wat ik zie is "Press any key to continue". Zie jij waar het wellicht misgaat?

Edit: al gevonden... mijn GhostScript is geupdate en is versie 21. Hij werkt nu goed, bedankt!
Nog een vraagje:
Is er een manier om het console windows te onderdrukken, zodat alles op de achtergrond gebeurd?

[ Voor 33% gewijzigd door luuksnijmegen op 18-08-2017 10:03 ]


  • GNID
  • Registratie: Januari 2005
  • Niet online
luuksnijmegen schreef op vrijdag 18 augustus 2017 @ 09:54:
Nog een vraagje:
Is er een manier om het console windows te onderdrukken, zodat alles op de achtergrond gebeurd?
Ja hoor, daar zijn genoeg manieren voor. Ga eens op zoek op internet, zou ik zo zeggen ...

  • luuksnijmegen
  • Registratie: Oktober 2009
  • Laatst online: 05-11 22:28
Ik zie dat ik dan het volgende kan doen: Use gswin32c (command line version) instead of gswin32 (windowed version).

Echter krijg ik dan precies hetzelfde scherm alleen dan wit. Het scherm waar staat welke PDF wordt omgezet wil ik wel zien, alleen GhostScript niet. Ik kan niet vinden hoe ik GhostScript onderdruk.

Ik vond het volgende, maar ik gebruik juist al de "c variant"
If you want to run Win32/Win64 Ghostscript on the commandline without having it popping up a separate window (to display its <stdout> and <stderr> messages and allow you for <stdin> input typing), then use these binaries (depending on your version of your locally installed Ghostscript):

gswin32c.exe (note the added c for command/console)
gswin64c.exe (note the added c for command/console)
Do not use gswin32.exe or gswin64.exe! These are the versions which bring along their own popup windows...

Edit:
Ik vond zojuist de volgende parameter, deze werkt: -dQUIET

[ Voor 3% gewijzigd door luuksnijmegen op 18-08-2017 11:18 ]


  • GNID
  • Registratie: Januari 2005
  • Niet online
Vervang bijvoorbeeld start /WAIT .... door :

start /MIN /WAIT ....

Dat zorgt ervoor dat het GhostScript venster alleen zichtbaar is op de taakbalk.
Pagina: 1