質問: 作成pdf印刷ページスケールなし ページスケーリングの印刷オプションが「なし」または「実際のサイズ」に設定されているpdfドキュメントを生成する必要がありますドキュメントのこの設定は、adobereaderまたは他のpdfリーダーでドキュメントを開いたときのデフォルトが、「このページをプリンターの余白に収まるように縮小しない」ことを意味します。adobe reader 10では、制御したい設定は[印刷]ダイアログの下にあり、[ページのサイズ設定と処理]は[サイズオプション]のオプションです。ドキュメントをデフォルトで[特大ページを縮小]ではなく[実際のサイズ]にします。私は自分の情報源と話し合い、adobe standardeditionでpdfドキュメントを作成/保存してテストしました。ドキュメントの表示プロパティをこの正確なプロパティのデフォルトに設定でき、adobereaderは代わりにそれを尊重しますシンクであるadobereaderのデフォルトを使用する。pdf creator 1.5.0を使用してpfdドキュメントを「印刷」しているので、ポストスクリプトをドキュメントに適用できるようです。ただし、目的に合っていてこのオプションがあれば、別のpdfプリンターを使用することもできます。 pdfcreator設定にguiオプションが表示されません。ghostscriptを使用してプロパティを適用できると確信していますが、その方法を知る必要があります。更新:adobe pdf仕様を調べていましたが、探しているドキュメントのプロパティはpdf1.6にあるようです。仕様。 12.2ビューア設定ドキュメントのカタログ(7.7.2「ドキュメントカタログ」を参照)のviewerpreferencesエントリは、ドキュメントが画面または印刷で表示される方法を制御するビューア設定辞書(pdf 1.2)を指定します。そのような辞書が指定されていない場合、準拠するリーダーは、現在のユーザー設定に従って動作する必要があります。表150に、ビューア設定辞書の内容を示します。 printscaling オプション; pdf 1.6)このドキュメントの印刷ダイアログが表示されたときに選択されるページスケーリングオプション。有効な値は、ページスケーリングがないことを示すnoneと、準拠するリーダーのデフォルトの印刷スケーリングを示すappdefaultです。このエントリに認識されない値がある場合は、appdefaultが使用されます。デフォルト値:appdefault。印刷ダイアログが抑制され、そのパラメータが他のソースから提供されている場合でも、このエントリは尊重されます。 これはまさに私がサードパーティのpdfプリンターソフトウェアまたはghostscriptを介して制御したいものです。私はpdfの専門家ではなく、その方法がわかりません。update:pdf creatorを使用してソリューションを開発し、受け入れられた回答にソリューションを編集しました。また、apiを使用してpdfを生成するときにアプリケーションの可能性がある以下についても調べました。 ---(solid documents pdf itextpdf -c#バージョンでも利用可能
回答: これは、viewerpreferencesdictで/printscaling /noneを指定することで可能になります( iso 32000-1:2008 のセクション12.2を参照してください。更新:これを試してください:[ {catalog} << /viewerpreferences << /printscaling /none >> >> /put pdfmark http://www.digipedia.pl/usenet/thread/1191/1835/ を参照してください更新:ポスターから 最終的な解決策は、pdf creatorの「アクション」機能を使用してpdf creatorによって生成されたポストスクリプトに上記のポストスクリプト行を追加することでした。 (保存前のアクション) http://www.pdfforge.org/content/actions また、このリンクをアクションのインスピレーションとして使用し、プリインストールされているvbsスクリプトを調べて、pdfポストスクリプトファイルへの変換に情報を追加するために何をする必要があるかを理解しました。 pdfcreatorドキュメントビューの設定 -これに似たスクリプトがpdfcreatorに含まれていたようです。とにかく、これは、printscalingのデフォルトプロパティを追加するためにpdfcreatorに追加できる私の最後のスクリプトです。' 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 "[ {catalog} << /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 pdfcreatorの既存のvbsスクリプトを介して提供されたpdfcreatorからの出力を解析するために使用されるiniファイルクラスを信用できません。