Erstellen Sie ein PDF mit keiner Seitengröße

10603
Collin

Ich muss ein PDF-Dokument erstellen, für das die Druckoptionen für die Seitenskalierung auf "Keine" oder "Tatsächliche Größe" eingestellt sind.

Diese Einstellung im Dokument würde bedeuten, dass die Standardeinstellung beim Öffnen des Dokuments in Adobe Reader oder einem anderen PDF-Reader "Diese Seite nicht verkleinern, um in die Druckerränder zu passen" ist.

In Adobe Reader 10 ist die Einstellung, die ich steuern möchte, unter dem Dialogfeld "Drucken" und "Seitengröße und -verarbeitung" die Option "Größenoptionen". Ich möchte, dass das Dokument standardmäßig auf "Tatsächliche Größe" anstelle von "Übergroße Seiten verkleinern" gesetzt wird.

Ich habe mit meinen Quellen gesprochen und mit dem Erstellen / Speichern eines PDF-Dokuments mit der Adobe Standard Edition getestet. Sie können für die Ansichtseigenschaften des Dokuments einen Standardwert für diese Eigenschaft festlegen. Adobe Reader berücksichtigt dies, anstatt den Adobe Reader-Standard zu verwenden was ist shink.

Ich verwende PDF Creator 1.5.0, um das pfd-Dokument zu "drucken", wodurch PostScript auf das Dokument angewendet werden kann. Ich könnte jedoch einen alternativen PDF-Drucker verwenden, wenn er meinem Zweck entspricht und diese Option hatte. In den PDF Creator-Einstellungen wird keine GUI-Option zur Steuerung angezeigt.

Ich bin mir ziemlich sicher, dass ich Ghostscript verwenden könnte, um eine Eigenschaft anzuwenden, aber ich muss wissen, wie es geht.

Update : Ich habe mir die Adobe-PDF-Spezifikation angesehen und die Dokumenteigenschaften, die ich suche, scheinen in der PDF-1.6-Spezifikation zu sein.

12.2 Viewer-Voreinstellungen Der Eintrag "ViewerPreferences" im Katalog eines Dokuments (siehe 7.7.2, "Dokumentenkatalog") bezeichnet ein Viewer-Voreinstellungswörterbuch (PDF 1.2), das steuert, wie das Dokument auf dem Bildschirm dargestellt oder gedruckt werden soll. Wenn kein solches Wörterbuch angegeben ist, sollten sich konforme Leser entsprechend ihren aktuellen Benutzereinstellungen verhalten. Tabelle 150 zeigt den Inhalt des Viewer-Voreinstellungswörterbuchs.

PrintScaling - (Optional; PDF 1.6) Die Seitenskalierungsoption, die ausgewählt werden soll, wenn für dieses Dokument ein Druckdialogfeld angezeigt wird. Gültige Werte sind None, was keine Seitenskalierung angibt, und AppDefault, die die standardmäßige Skalierung des konformen Lesers angibt. Wenn dieser Eintrag einen nicht erkannten Wert hat, muss AppDefault verwendet werden. Standardwert: AppDefault. Wenn der Druckdialog unterdrückt wird und seine Parameter von einer anderen Quelle bereitgestellt werden, muss dieser Eintrag dennoch berücksichtigt werden.

Dies ist genau das, was ich mit einer Drittanbieter-PDF-Druckersoftware oder Ghostscript steuern möchte. Ich bin kein PDF-Experte und weiß nicht, wie ich das machen soll.

Update : Ich habe eine Lösung mit Pdf Creator entwickelt und die Lösung in die akzeptierte Antwort umgewandelt. Ich habe mir auch das Folgende angesehen, das für Anwendungen bei der Verwendung einer API zum Generieren des PDFs potenziell ist.
Feste Dokumente pdf

itextpdf - Auch in einer C # -Version verfügbar

2
Ich kenne mich mit PDF und Ghostscript aus (zumindest denke ich das gerne) ... aber ich verstehe Ihr Problem nicht, sorry. Kurt Pfeifle vor 11 Jahren 0
Tut mir leid, dass ich zum ersten Mal versucht habe zu kommentieren und mein Browser ist ausgeflippt. und jetzt kann ich nicht bearbeiten. Einfache Frage Ich möchte den Ghostscript-Parameter gegenüber -dPDFFitPage. Es kann mit Adobe Standard gemacht werden, aber über die GUI weiß ich nicht, welche Eigenschaft ich einstellen soll. vor 11 Jahren 0
Öffnen Sie eine PDF-Datei in Adobe Reader -> Print -> unter dem Titel "Seitengröße und -verarbeitung". Siehe "Größenoptionen". Normalerweise lautet die Standardeinstellung "Übergroße Shink-Seiten" (andere PDF-Viewer haben eine ähnliche Einstellung, aber der Einfachheit halber) Ich halte an den genauen Wörtern von Adobe fest und möchte die Option "Aktuelle Größe" in das Dokument einbetten. Ich weiß, dass dies möglich ist, weil Sie mit Adobe Standard (Full Creator) dies festlegen können. Dies wird beim Öffnen der PDF-Datei in Adobe Reader berücksichtigt. vor 11 Jahren 0
Als Autor einer Frage können Sie sie jederzeit bearbeiten. Versuchen Sie, klar und logisch zu sein. Beginnen Sie damit, zu sagen, welche Software + Version Sie aktuell verwenden und was Sie erreichen möchten. Und Sie sollten dies tun, bevor es abgelehnt oder sogar gelöscht wird ... Sie beginnen derzeit mit * "Ich muss ein PDF erstellen ..." *, ohne zu sagen, welche Software Sie verwenden. Dann sprechen Sie weiter über * "Druckoptionen für die Seitenskalierung" * ... was etwas völlig anderes ist als * "PDF generieren" * - Das Drucken eines PDFs ist eine Funktion eines PDF-Viewers, nicht eines PDF-Generators. Kurt Pfeifle vor 11 Jahren 0
Ich freue mich über Ihre Kommentare. Ich muss versuchen, die Frage neu zu formulieren, aber ... Hier wird es haarig, weil sie verwandt sind. Ich möchte ein Dokument generieren, das über die Standardeigenschaft für diese bestimmte Option verfügt, die nur angezeigt wird, wenn Sie versuchen, das Dokument zu drucken. Es ist mit Adobe Standard und mit -dPDFFitPage in Ghost Scrpt möglich, aber das macht die falsche Einstellung. Ich möchte das Gegenteil der Fit-Seite. Ich möchte die tatsächliche Größe. Ich weiß auch, dass Sie andere Eigenschaften festlegen können, wie z. B. "Welche Ansicht soll das PDF-Dokument standardmäßig in" ... Vollbild usw. zum Zeitpunkt der Dokumenterstellung öffnen. Danke dir. vor 11 Jahren 0
Bitte fügen Sie keine Klarstellungen als Kommentare hinzu. Bearbeiten Sie Ihre ursprüngliche Frage. Schreiben Sie ggf. eine neue und löschen Sie die alte Version insgesamt. Außerdem ist die "Standardansicht" eines PDFs, über das Sie sprechen, nur eine * Empfehlung * für den Betrachter - der Betrachter muss diese nicht einhalten (und Sie als Zuschauer können ihn überschreiben, indem Sie dem Betrachter sagen, dass er PDF-Dateien immer öffnen soll in einem anderen Modus bevorzugen Sie ...). Kurt Pfeifle vor 11 Jahren 0
Beachten Sie auch, dass PDFFitPage nicht das tut, was Sie zu meinen scheinen. Eine eingehende PDF-Datei wird so skaliert, dass sie zu einer anderen Mediengröße passt. In Ghostscripts pdfwrite-Gerät befindet sich nichts, was das Standarddruckverhalten eines PDF-Viewers ändert. Tatsächlich ist mir keine Möglichkeit bekannt, dies zu tun. Wenn Sie eine PDF-Datei haben, für die dies möglich ist, schlage ich vor, Sie öffentlich zugänglich zu machen, damit wir sie betrachten können. KenS vor 11 Jahren 1
Willkommen bei Superuser.sx! Ihr Post wurde von [so] hierher migriert. Registrieren Sie sich auch auf dieser Website und stellen Sie sicher, dass beide Konten miteinander verknüpft sind (indem Sie dieselbe OpenID verwenden). Andernfalls können Sie keine Antworten kommentieren oder annehmen oder Ihre Frage nicht bearbeiten. Martin Schröder vor 11 Jahren 0
@KenS Vielen Dank für die Klärung von -PDFFitPage. Martin-Schroder hat die genaue ISO-Spezifikation angegeben, die ich verwenden möchte. Ich weiß jedoch noch nicht, wie ich das machen soll. Ich glaube, es geht um die Verwendung von pdfMark, kann aber nicht genau herausfinden, wie es geht. Collin vor 11 Jahren 0
Willkommen bei Superuser.sx! Normalerweise fügen wir keinen Gruß oder "Danke" in unseren Posts ein. Dies mag auf den ersten Blick seltsam erscheinen, ist aber kein Zeichen mangelnder Höflichkeit, sondern Teil unseres Bestrebens, alles sehr knapp zu halten. Upvoting ist der bevorzugte Weg, um den Benutzern, die Ihnen geholfen haben, "Danke" zu sagen. Martin Schröder vor 11 Jahren 0

2 Antworten auf die Frage

2
Martin Schröder

Dies sollte durch Angabe /PrintScaling /Noneim ViewerPreferencesDiktat möglich sein (siehe Abschnitt 12.2 in ISO 32000-1: 2008) .

Update : Versuchen Sie folgendes:

[ << /ViewerPreferences << /PrintScaling /None >> >> /PUT pdfmark 

Siehe http://www.digipedia.pl/usenet/thread/1191/1835/

Update : Von Poster
Die letzte Lösung bestand darin, die obige Postscript-Zeile in das von PDF Creator generierte Postscript mit der "Actions" -Funktion von PDF Creator einzufügen. (Aktion vor dem Speichern)

http://www.pdfforge.org/content/actions

Ich habe diesen Link auch als Inspiration für die Aktion verwendet und habe mir die vorinstallierten VBS-Skripts angesehen, um herauszufinden, was zu tun ist, um der PDF-Postscript-Datei Informationen hinzuzufügen.

PDFCreator Document View-Einstellungen - Es scheint, dass ein ähnliches Skript in PdfCreator enthalten war.

Auf jeden Fall ist dies mein letztes Skript, das zu Pdf Creator hinzugefügt werden kann, um die Standardeigenschaft PrintScaling hinzuzufügen.

' SetPrintScalingNone.vbs script ' Author: Collin Kulbacki ' Version: 1.0.0.0 ' Date: Oct 18, 2012 ' Comment: This script Sets the ViewerPrefferences Print Scalling to none.  Option Explicit  Const AppTitle = "PDFCreator - SetPrintScallingNone" Const ForReading = 1, ForAppending = 8  Dim objArgs, objNetwork, section, ini, fso, f Dim fname, key, psFile, strTitle, printScalingFile  Set objArgs = WScript.Arguments  If objArgs.Count = 0 Then MsgBox "This script needs a parameter!", vbExclamation, AppTitle WScript.Quit End If  fname = objArgs(0)   Set ini = New IniFile ini.Load fName, true  Set fso = CreateObject("Scripting.FileSystemObject") printScalingFile = fso.GetParentFolderName(fName) & "\" & GenerateGUID & ".ps" Set f = fso.OpenTextFile(printScalingFile, ForAppending, True) f.writeline "[ << /ViewerPreferences << /PrintScaling /None >> >> /PUT pdfmark"  f.Close  Set objNetwork = CreateObject("WScript.Network")  set section = ini.AddSection(GenerateGUID) section.AddKey("SessionId").Value = " " section.AddKey("WinStation").Value = " " section.AddKey("UserName").Value = objNetwork.UserName section.AddKey("ClientComputer").Value = objNetwork.ComputerName section.AddKey("SpoolFileName").Value = printScalingFile section.AddKey("PrinterName").Value = " " section.AddKey("JobId").Value = " " section.AddKey("DocumentTitle").Value = "PrintScaling"  ini.Save fName, true    WScript.Quit    Private Function GenerateGUID() GenerateGUID = Replace(Mid(CreateObject("Scriptlet.TypeLib").GUID, 2, 36), "-", "") End Function    ' http://www.codeproject.com/Articles/21896/INI-Reader-Writer-Class-for-C-VB-NET-and-VBScript ' IniFile class used to read a nd write ini files by loading the file into memory Class IniFile 'List of IniSection objects keeps track of all the sections in the INI file Private m_pSections, OpenAsUnicode 'Public constructor Public Sub Class_Initialize() Set m_pSections = CreateObject("Scripting.Dictionary") m_pSections.CompareMode = vbTextCompare End Sub  'Returns an array of the IniSections in the IniFile Public Property Get Sections Sections = m_pSections.Items End Property  'Load IniFile object with existing INI Data Public Sub Load( ByVal sFileName, ByVal bAppend ) Dim intAsc1Chr, intAsc2Chr If Not bAppend Then RemoveAllSections() ' Clear the object...  Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")  Dim tempsection : Set tempsection = Nothing 'Dim oReader : Set oReader = objFSO.OpenTextFile( sFileName,, , format ) Dim oReader, Stream Set Stream = objFSO.OpenTextFile(sFileName, 1, False) intAsc1Chr = Asc(Stream.Read(1)) intAsc2Chr = Asc(Stream.Read(1)) Stream.Close  ' (255, 254 == FF, FE -> UniCode) Or (91, 0 == [ '\0' -> Widechar inf file from pdfcmon.dll) If (intAsc1Chr = 255 And intAsc2Chr = 254) Or (intAsc1Chr = 91 And intAsc2Chr = 0) Then  OpenAsUnicode = True Else OpenAsUnicode = False End If  Set oReader = objFSO.OpenTextFile( sFileName, 1, 0, OpenAsUnicode ) Dim regexsection : set regexsection = new regexp  Dim regexkey : Set regexkey = new regexp Dim regexcomment : Set regexcomment = new regexp  regexcomment.Pattern = "^([\s]*#.*)" regexcomment.Global = False regexcomment.IgnoreCase = True regexcomment.MultiLine = False  ' Left for history 'regexsection.Pattern = "\[[\s]*([^\[\s].*[^\s\]])[\s]*\]" 'regexsection.Pattern = "^[\s]*\[[\s]*([^\[\s].*[^\s\]])[\s]*\][\s]*$" regexsection.Pattern = "^\s*\[\s*(.*[^\s])\s*\]\s*$" regexsection.Global = False regexsection.IgnoreCase = True regexsection.MultiLine = False  regexkey.Pattern = "^\s*([^=\s]*)[^=]*=(.*)"  regexkey.Global = False regexkey.IgnoreCase = True regexkey.MultiLine = False  While Not oReader.AtEndOfStream Dim line : line = oReader.ReadLine() If line <> "" Then Dim m If regexcomment.Test(line) Then Set m = regexcomment.Execute(line) 'WScript.Echo("Skipping Comment " & m.Item(0).subMatches.Item(0) ) ElseIf regexsection.Test(line) Then Set m = regexsection.Execute(line) 'WScript.Echo("Adding section [" & m.Item(0).subMatches.Item(0) &"]" ) Set tempsection = AddSection( m.Item(0).subMatches.Item(0) ) ElseIf regexkey.Test(line) And Not tempsection Is Nothing Then Set m = regexkey.Execute(line) 'WScript.Echo("Adding Key ["& m.Item(0).subMatches.Item(0) &"]=["& m.Item(0).subMatches.Item(1) &"]" ) tempsection.AddKey( m.Item(0).subMatches.Item(0) ).Value = m.Item(0).subMatches.Item(1) ElseIf Not tempsection Is Nothing Then 'WScript.Echo("Adding Key ["& line &"]" ) tempsection.AddKey( line ) 'Else ' WScript.Echo("Skipping unknown type of data: " & line) End If End If Wend oReader.Close() End Sub  'Allows you to do a save the IniFile resident in memory to file Public Sub Save(ByVal sFileName, ByVal AsUnicode) Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject") Dim oWriter : Set oWriter = objFSO.CreateTextFile( sFileName, True, AsUnicode )  Dim s 'IniSection Dim k 'IniKey For Each s In Sections 'WScript.Echo("Writing Section: " & s.Name) oWriter.WriteLine("[" & s.Name & "]") For Each k In s.Keys If k.Value <> vbNullString Then 'WScript.Echo("Writing Key: "&k.Name&"="&k.Value) oWriter.WriteLine(k.Name & "="& k.Value ) Else 'WScript.Echo("Writing Key: "&k.Name) oWriter.WriteLine(k.Name) End if Next Next oWriter.Close() End Sub  'Returns the IniSection object associated with a section name Public Function GetSection(ByVal sSection ) Set GetSection = Nothing sSection = Trim(sSection) 'Trim spaces If Len( sSection ) <> 0 Then If m_pSections.Exists( sSection ) Then Set GetSection = m_pSections.Item(sSection) End If End If End Function  ' Adds a section to the IniFile object, returns a IniSection object Public Function AddSection(ByVal sSection ) Set AddSection = Nothing If StrComp(TypeName(sSection),"IniSection",1) = 0 Then  If Not sSection Is Nothing Then ' Only purpose is to be used by child to re-insert If Not sSection Is Nothing Then If Not m_pSections.Exists( sSection.Name ) Then Set m_pSections.Item( sSection.Name ) = sSection Set AddSection = sSection End If End If End If  ElseIf StrComp(TypeName(sSection),"String",1) = 0 Then sSection = Trim(sSection) If Len( sSection ) <> 0 Then  If m_pSections.Exists( sSection ) Then Set AddSection = m_pSections.Item(sSection) Else Dim s : Set s = New IniSection Call s.Init( Me, sSection ) Set m_pSections.Item(sSection) = s Set AddSection = s End If End If  End If End Function  ' Removes all existing sections (clears the object)  Public Sub RemoveAllSections() Call m_pSections.RemoveAll() End Sub  ' Remove a section by name or section object Public Function RemoveSection(ByVal Obj) RemoveSection = False If StrComp(TypeName(Obj),"IniSection",1) = 0 Then  If Not Obj Is Nothing Then m_pSections.Remove(Obj.Name) RemoveSection = True End If  ElseIf StrComp(TypeName(Obj),"String",1) = 0 Then RemoveSection = RemoveSection( GetSection(Obj) ) End If  End Function  ' Remove a key by section namd and key name Public Function RemoveKey(ByVal sSection, ByVal sKey) RemoveKey = False Dim s : Set s = GetSection(sSection) If Not s Is Nothing Then RemoveKey = s.RemoveKey( sKey ) End If End Function  ' Returns a KeyValue in a certain section Public Function GetKeyValue(ByVal sSection, ByVal sKey ) GetKeyValue = vbNullString Dim s : Set s = GetSection(sSection) If Not s Is Nothing Then Dim k : Set k = s.GetKey(sKey) If Not k Is Nothing Then GetKeyValue = k.Value End If End If End Function  ' Sets a KeyValuePair in a certain section Public Function SetKeyValue(ByVal sSection, ByVal sKey, ByVal sValue ) SetKeyValue = False Dim s : Set s = AddSection(sSection) If Not s Is Nothing Then Dim k : Set k = s.AddKey(sKey) If Not s Is Nothing Then k.Value = sValue SetKeyValue = True End If End If End Function  ' Renames an existing section returns true on success, false if the section didn't exist or there was another section with the same sNewSection Public Function RenameSection(ByVal sSection, ByVal sNewSection) ' Note string trims are done in lower calls. RenameSection = False Dim s : Set s = GetSection(sSection) If Not s Is Nothing Then RenameSection = s.SetName(sNewSection) End If End Function  ' Renames an existing key returns true on success, false if the key didn't exist or there was another section with the same sNewKey Public Function RenameKey(ByVal sSection, ByVal sKey, ByVal sNewKey) ' Note string trims are done in lower calls. RenameKey = False Dim s : Set s = GetSection(sSection) If Not s Is Nothing Then Dim k : Set k = s.GetKey(sKey) If Not k Is Nothing Then RenameKey = k.SetName(sNewKey) End If End If End Function  End Class   'IniSection Class  Class IniSection ' IniFile IniFile object instance Private m_pIniFile ' Name of the section Private m_sSection ' List of IniKeys in the section Private m_keys  'Friend constuctor so objects are internally managed Public Sub Class_Initialize Set m_pIniFile = Nothing m_sSection = "" Set m_keys = CreateObject("Scripting.Dictionary") m_keys.CompareMode = vbTextCompare End Sub  ' Function only works once... Public Sub Init( ByVal oIniFile, ByVal sSection ) If m_pIniFile is Nothing Then  Set m_pIniFile = oIniFile m_sSection = sSection End If  End Sub  'Returns an array of the IniKeys in the IniFile Public Property Get Keys Keys = m_keys.Items End Property  'Returns the section name Public Property Get Name name = m_sSection End Property  'Set the section name 'Returns true on success, False if key already exists in the section Public Function SetName(ByVal sSection) SetName = False ' Default sSection = Trim(sSection) If Len( sSection ) <> 0 Then Dim s : Set s = m_pIniFile.GetSection(sSection) If Not s Is Me And Not s Is Nothing Then Exit Function Call m_pIniFile.RemoveSection(Me) m_sSection = sSection Call m_pIniFile.AddSection(Me)  SetName = True End If End Function  'Returns the section name Public Function GetName() GetName = m_sSection End Function  'Adds a key to the IniSection object 'Returns Nothing on failure Public Function AddKey(ByVal sKey) Set AddKey = Nothing ' Is this a string or object of IniKey If StrComp(TypeName(sKey),"IniKey",1) = 0 Then  ' Only purpose is to be used by child to re-insert If Not sKey Is Nothing Then If Not m_keys.Exists( sKey.Name ) Then Set m_keys.Item(sKey.Name) = sKey Set AddKey = sKey End If End If ElseIf StrComp(TypeName(sKey),"String",1) = 0 Then ' String was passed... sKey = Trim(sKey) If Len(sKey) <> 0 Then If m_keys.Exists( sKey ) Then Set AddKey = m_keys.Item(sKey) Else Dim k : Set k = New IniKey Call k.Init( Me, sKey ) Set m_keys.Item(sKey) = k Set AddKey = k End If End If End If  End Function  'Returns a IniKey 'Returns Nothing on failure  Public Function GetKey(ByVal sKey) Set GetKey = Nothing sKey = Trim(sKey) If Len(sKey) <> 0 Then If m_keys.Exists( sKey ) Then Set GetKey = m_keys.Item(sKey) End If  End If End Function  'Removes all the keys in the section Public Sub RemoveAllKeys() Call m_keys.RemoveAll() End Sub  'Removes a single key by IniKey object by string or object Public Function RemoveKey(ByVal Obj) RemoveKey = False If StrComp(TypeName(Obj),"IniKey",1) = 0 Then  If Not Obj Is Nothing Then m_keys.Remove(Obj.Name) RemoveKey = True End If ElseIf StrComp(TypeName(Obj),"String",1) = 0 Then RemoveKey = RemoveKey( GetKey(Obj) ) End If  End Function  End Class ' End of IniSection  'IniKey Class Class IniKey ' Name of the Key Private m_sKey ' Value associated Private m_sValue ' Pointer to the parent CIniSection Private m_pSection  'Friend constuctor so objects are internally managed Public Sub Class_Initialize m_sKey = "" m_sValue = "" Set m_pSection = Nothing End Sub  'Returns the key's parent IniSection Public Sub Init( ByVal oIniSection, ByVal sKey ) If m_pSection Is Nothing Then Set m_pSection = oIniSection m_sKey = sKey End If  End Sub  'Returns the name of the Key Public Property Get Name name = m_sKey End Property  ' 'Gets\Sets the value associated with the Key Public Property Let Value( strKeyValue ) m_sValue = strKeyValue End Property  'Gets\Sets the value associated with the Key Public Property Get Value() value = m_sValue End Property  'Sets the key name 'Returns true on success, fails if the section name sKeyName already exists Public Function SetName(ByVal sKey ) SetName = False sKey = Trim(sKey) If Len(sKey) <> 0 Then Dim s : Set s = m_pSection.GetKey(sKey) If Not s Is Me And Not s Is Nothing Then Exit Function Call m_pSection.RemoveKey(Me) ' Set our new name m_sKey = sKey ' Put our own object back Call m_pSection.AddKey(Me) SetName = True End If End Function  ' Returns the current key name Public Function GetName() GetName = m_sKey End Function  End Class 

Ich kann die ini-Dateiklasse, die zum Analysieren der Ausgabe von PdfCreator verwendet wird, die über die vorhandenen vbs-Scrips in PdfCreator bereitgestellt wurde, nicht anerkennen.

1
KenS

Checking version 9 of the pdfmark reference, I cannot see any pdfmark which affect Viewer Preferences. SO there is no way for you to achieve this using Ghostscript without modifying the pdfwrite device.

Ghostscript's pdfwrite device doesn't emit a ViewerPreferences dictionary in the Catalog object at all, so you would need to add one.

Vielen Dank für die Informationen. Vielleicht ist Ghostscript die falsche Technologie, um danach gefragt zu werden. Mein Wissen darüber ist äußerst gering. Nach meinem Verständnis dachte ich, dass Ghostscript ps2pdf verwendet und es schien, als könnte ps2pdf den Katalog hinzufügen / bearbeiten. Aber wie gesagt, ich bin ein Neuling in pdf / ghostscript und kann nicht herausfinden, was die Syntax ist. Auch nachdem ich das gelesen habe. http://ghostscript.com/doc/current/Ps2pdf.htm#Orientation Collin vor 11 Jahren 0
@ Collin: Ich glaube, das kann funktionieren. siehe das Update zu meiner Antwort. Martin Schröder vor 11 Jahren 0
ps2pdf (in mindestens einer Inkarnation mit diesem Namen) ist nur ein Skript, das Ghostscript aufruft. Wenn Ghostscript involviert ist, wird alles andere verwendet, nicht umgekehrt. Ghostscript ist die zugrunde liegende Technologie. KenS vor 11 Jahren 0
Martin, Ihre Antwort ist genau der richtige Weg, um dies mit pdfmark zu tun, glaube ich, mit einem kleinen Problem. Wie bereits erwähnt, gibt Ghostscript keine ViewerPreferences im Katalogwörterbuch aus. Da der Katalog nach Bedarf (am Ende des Prozesses) erstellt wird, können Sie dem Katalogwörterbuch im Laufe des Jobs nichts hinzufügen. Die einzige Möglichkeit, dies mit Ghostscript zu tun, besteht, soweit ich sehen kann, darin, Ihren bevorzugten Editor und C-Compiler herauszuholen und mit dem Codieren zu beginnen. Der Katalog ist in gdevpdf.c, pdf_close () um die Zeile 2421 geschrieben. KenS vor 11 Jahren 0