मैं कमांड लाइन से एक रिक्त पीडीएफ कैसे बनाऊं?


57

मुझे हाल ही में एक एकल रिक्त पीडीएफ पेज (8.5 "x 11" आकार) की आवश्यकता थी और महसूस किया कि मुझे नहीं पता कि कमांड लाइन से एक कैसे बनाया जाए।

जारी करने से touch blank.pdfएक खाली पीडीएफ फाइल तैयार होती है । क्या कोई कमांड लाइन टूल है जो एक खाली पीडीएफ पेज बनाता है ?


तुम्हें यह क्यों चाहिए? मेरे पास नॉन-डुप्लेक्स प्रिंटर पर दो तरफा (डुप्लेक्स) प्रिंटिंग के लिए एक प्रिंटिंग पैकेज है। ऐसा करने के लिए एक अतिरिक्त पृष्ठ खाली करने की आवश्यकता होती है, जब एक विषम पृष्ठ गणना वाली नौकरी के लिए गिने हुए पृष्ठों को प्रिंट किया जाता है। ऐसा करने के लिए, मैं सिर्फ एलपी को एक फॉर्मफीड भेजता हूं। यह एक रिक्त पृष्ठ फ़ाइल बनाने के बिना चाल करता है, आदि ..
जो

10
@ जो यह हमारे व्यवसाय में से कोई नहीं है कि ब्रायन क्यों चाहता है या इसकी आवश्यकता है।
इलेन होल्डर

6
@IHHolder: मुझे लगता है कि आप की तरह अधिक एसई उपयोगकर्ताओं को सोचा था।
मेहरदाद

3
@IainHolder - मैं ओपी के व्यवसाय में शिकार करने की कोशिश नहीं कर रहा हूं! मैं सिर्फ यह सुझाव देना चाहता था कि यदि मैं जैसा कुछ कर रहा था, वैसा ही है, तो इसे करने का एक और तरीका है। अक्सर इस तरह की चीजें xy प्रॉब्लम्स होती हैं ( meta.stackexchange.com/questions/66377/what-is-the-xy-problem ), इसलिए यह पूछना कि लक्ष्य क्या काफी उपयुक्त हो सकता है।
जो

5
मैं बस ऊपर दिए गए लिंक के माध्यम से विस्तार से पढ़ता हूं। मुझे नहीं पता था कि यह एक ऐसा विवादास्पद मुद्दा था। TL; DR - यदि आप जानते हैं कि आप क्या कर रहे हैं, तो आप बस उस प्रश्न का उत्तर चाहते हैं जो आपने पूछा था। यदि आप इतनी अच्छी तरह से वाकिफ नहीं हैं, तो आपने गलत सवाल और स्पष्टीकरण के बारे में पूछा हो सकता है कि वास्तविक मुद्दा क्या मदद कर सकता है।
जो

जवाबों:


85

convert, केतन के उत्तर में उपयोग की जाने वाली ImageMagick उपयोगिता भी आपको कुछ लिखने की अनुमति देती है

convert xc:none -page Letter a.pdf

या

convert xc:none -page A4 a.pdf

या (क्षैतिज A4 पेपर के लिए)

convert xc:none -page 842x595 a.pdf

आदि , एक खाली पाठ फ़ाइल बनाने के बिना। @chbrown ने देखा कि यह एक छोटी पीडीएफ फाइल बनाता है।

"xc:" का अर्थ है "X लगातार छवि" लेकिन वास्तव में "x कैनवास" के रूप में सोचा जा सकता है। यह एक रंग के एक ब्लॉक को निर्दिष्ट करने का एक तरीका है, इस मामले में कोई भी नहीं। Http://imagemagick.org/Usage/canvas/#solid पर अधिक जानकारी जो कि ImageMagick के लिए "वास्तविक" मैनुअल है। [पाइप से जानकारी के साथ पूरक] (जैसी चीजें pdf:aस्पष्ट रूप से एक फ़ाइल के स्वरूप की घोषणा करने के लिए इस्तेमाल किया जा सकता है। label:'some text', gradient:, rose:और logo: विशेष फ़ाइल स्वरूपों के अन्य उदाहरण होने लगते हैं।)

Anko ने इस संशोधन को एक अलग उत्तर के रूप में पोस्ट करने का सुझाव दिया, इसलिए मैं इसे कर रहा हूं।


2
ImageMagick में वास्तव में एक उपयोगी मैनुअल नहीं है। "xc: <foo>" का अर्थ है "X लगातार छवि" लेकिन वास्तव में "x कैनवास" के रूप में सोचा जा सकता है। यह एक रंग के एक ब्लॉक को निर्दिष्ट करने का एक तरीका है, इस मामले में कोई भी नहीं । अधिक जानकारी के लिए imagemagick.org/Usage/canvas/#solid जो ImageMickick के लिए "de facto" मैनुअल है।
पाइप

2
एक तरह से, यह पत्र के बजाय ए 4 के साथ भी काम करता है, यदि आप समझदार पेपर आकार चाहते हैं।
टीआरआईजी

@TRiG: बिल्कुल। मुझे खेद है कि मैंने अपने संपादन में आपका उल्लेख नहीं किया, लेकिन इस मामले में मैंने इसे जान लिया था।
बार्टेकहोम

मैंने इसे स्वीकार किए गए उत्तर में बदल दिया क्योंकि यह एक है जो मैंने अपने~/bin
ब्रायन फिट्ज़पैट्रिक

क्या इस कमांड को n रिक्त पृष्ठों के साथ एक पीडीएफ फाइल बनाने के लिए बदला जा सकता है?
ब्रायन

34

सबसे छोटे संभव जीआईएफ की तरह , सबसे छोटे संभव रिक्त-पृष्ठ पीडीएफ को हाथ से काम करने की आवश्यकता है, क्योंकि यह इतना छोटा है कि मेटाडेटा के अनावश्यक-लेकिन-हानिरहित बिट्स फ़ाइल आकार का एक महत्वपूर्ण हिस्सा बन जाते हैं, और संपीड़न वास्तव में चीजों को बड़ा बनाते हैं । यह भी पीडीएफ विनिर्देश में नियमों पर ध्यान देने की आवश्यकता है कि फ़ाइल संरचना के बिट्स क्या हैं और इसकी आवश्यकता नहीं है। (क्या आप जानते हैं कि पेज ऑब्जेक्ट में एक /Resourcesशब्दकोश होना चाहिए , भले ही वह खाली हो, लेकिन एक स्ट्रीम को शामिल करने की आवश्यकता नहीं/Contents है?)

यदि आप पीडीएफ 1.5 ऑब्जेक्ट और क्रॉस-रेफरेंस स्ट्रीम का उपयोग नहीं करते हैं (जिसका यह फायदा है कि फ़ाइल पूरी तरह से प्रिंट करने योग्य ASCII हो सकती है) मेरा मानना ​​है कि सबसे अच्छा आप कर सकते हैं 317 बाइट्स। यदि कॉपी और पेस्ट किया जाता है, तो ध्यान दें कि क्रॉस-रेफरेंस टेबल एंट्रीज (बीच की रेखाएं ) 0 4और इन चारों पर ट्रेलिंग स्पेस होने की जरूरत है trailer<<..., और इसके बाद कोई फाइनल न्यूलाइन नहीं होनी चाहिए %%EOF

%PDF-1.4
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
2 0 obj<</Type/Pages/Count 1/Kids[3 0 R]>>endobj
3 0 obj<</Type/Page/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<<>>>>endobj
xref
0 4
0000000000 65535 f 
0000000009 00000 n 
0000000052 00000 n 
0000000101 00000 n 
trailer<</Size 4/Root 1 0 R>>
startxref
178
%%EOF

मैन्युअल रूप से तैयार की गई v1.5 क्रॉस-रेफरेंस स्ट्रीम के साथ क्रॉस-रेफरेंस टेबल को बदलना फ़ाइल को थोड़ा छोटा बनाता है, इसकी कीमत अब प्रिंट करने योग्य ASCII: 294 बाइट्स नहीं है। (पठनीयता के लिए, इसका उल्लेख करने में सक्षम होने के लिए बिल्कुल भी नहीं, नीचे xref स्ट्रीम को हेक्सडंप किया गया है, लेकिन यह इसके स्ट्रीम डिक्शनरी में परिलक्षित नहीं है । एक वैध पीडीएफ को पुनर्प्राप्त करने के लिए आपको या तो हेक्सपंप को बदलना होगा। इसी तरह के बाइनरी बाइट्स, या 328 बाइट्स वाली फ़ाइल /Length 15को बदलने /Length 30/Filter/ASCIIHexDecodeऔर स्वीकार करने के लिए ।)

%PDF-1.5
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
2 0 obj<</Type/Pages/Count 1/Kids[3 0 R]>>endobj
3 0 obj<</Type/Page/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<<>>>>endobj
4 0 obj<</Type/XRef/Size 5/W[1 1 1]/Root 1 0 R/Length 15>>stream
0000ff01090001340001650001b200endstream endobj
startxref
178
%%EOF

मैंने एक ऑब्जेक्ट स्ट्रीम में 3 के माध्यम से 1 वस्तुओं को लपेटने के साथ भी प्रयोग किया, लेकिन इससे अधिक ओवरहेड वापस हो जाता है, जबकि स्ट्रीम संकुचित हो जाती है।

Xref स्ट्रीम का एक संभावित वैकल्पिक सूत्रीकरण है

4 0 obj<</Type/XRef/Size 4/W[0 1 0]/Index[1 4]/Root 1 0 R/Length 4>>stream
091365b2endstream endobj

अफसोस की बात है कि वास्तविक स्ट्रीम डेटा की लंबाई में पर्याप्त बचत के बावजूद, अतिरिक्त /Index[1 4]बचत के सभी बाइट को खा जाता है। इसके अलावा, यह मेरे लिए अस्पष्ट है कि क्या आपको फ़ाइल से पूरी तरह से ऑब्जेक्ट 0 छोड़ने की अनुमति है। (यह भी मेरे लिए स्पष्ट नहीं है कि क्या वस्तु 0 पीढ़ी संख्या होनी चाहिए -1। तो है कि है की आवश्यकता नहीं, आप वास्तव में के साथ और अधिक बाइट्स बचाने

4 0 obj<</Type/XRef/Size 5/W[1 1 0]/Root 1 0 R/Length 10>>stream
000001090134016501b2endstream endobj

।)

पेपर का आकार बदलने 612 792के लिए, पोस्टस्क्रिप्ट अंक (72 पोस्टस्क्रिप्ट अंक = 1 यूएस इंच या 25.4 मिलीमीटर) में व्यक्त की गई उपयुक्त चौड़ाई और ऊंचाई के साथ बदलें । उदाहरण के लिए, 595 842ए 4 के लिए। आप इसे शेल स्क्रिप्ट में एम्बेड कर सकते हैं, जो कुछ भी कागज़ के आकार की रिक्त पीडीएफ को खाली करता है; केवल मुश्किल हिस्सा यह सुनिश्चित कर रहा होगा कि startxrefऑब्जेक्ट 3 का आकार बदल जाने पर भी ऑफसेट सटीक रहे।



5
होता अगर कुछ इस तरह अच्छी तरह से प्राप्त किया जा रहा meta.codegolf पर पोस्ट किए गए देखने के लिए: meta.codegolf.stackexchange.com/questions/8990/...
नैट Eldredge

हालांकि यह एक टेक्स्ट एडिटर में खाली पेज के साथ एक वैध पीडीएफ डॉक्यूमेंट बनाने के लिए एक अच्छा समाधान है, यह बिल्कुल वैसा नहीं है जैसा कि मैं एक कमांडलाइन सॉल्यूशन (जैसा कि ओपी ने पूछा है) के संबंध में है।
कर्ट फ़िफ़ेल

23

यदि आपके पास convert(एक ImageMagick उपयोगिता) स्थापित है, तो आप ऐसा कर सकते हैं:

touch a.txt && convert a.txt -page Letter a.pdf

1
convertएक -sizeविकल्प भी है जिसका उपयोग आप आउटपुट पीडीएफ के आकार को सेट करने के लिए कर सकते हैं।
18

21
आप convert xc:none -page Letter a.pdfखाली txt फ़ाइल बनाए बिना भी लिख सकते हैं ।

3
@ BartekChom की विधि एक समतल रिक्त पृष्ठ बनाना प्रतीत होता है। यह एक छोटी फ़ाइल का निर्माण करता है, जिसके ऊपर कुछ भी चयन करने योग्य नहीं है, और यह किसी भी (null)फ़ॉन्ट त्रुटियों को ट्रिगर नहीं करता है ।
चब्रोएन

1
@BartekChom मैं चाहता हूं कि एक अलग उत्तर के रूप में इसलिए मैं इसे बढ़ा सकता हूं।
एको

1
मुझे convert.im6: improper image header a.txt '@ error / txt.c / ReadTXTImage / 429 मिला। Convert.im6: कोई चित्र परिभाषित नहींa.pdf' @ error/convert.c/ConvertImageCommand/3044.
सिगुर

12

echo .bp | groff -T pdf > t.pdf

आपके लिए लाया है, दुनिया के सबसे कम सॉफ्टवेयर वाले ग्रॉफ।


2
मुझे मिलता है groff: can't find `DESC' fileऔर groff:fatal error: invalid device `pdf'CentOS 7.2 पर ग्रॉफ संस्करण 1.22.2 के साथ।
gla3dr

मेरे लिए एक ही संदेश bash 4.1.2चल रहा हैgroff 1.18.1.4
zundarz

2
@ gla3dr न केवल ग्रॉफ-बेस पूरा ग्रॉफ पैकेज स्थापित करें।
कप्तान जिराफ

1
.bpसिर्फ "ब्रेक पेज" के लिए खड़ा है, यही कारण है कि यह एक 2 पेज दस्तावेज़ का उत्पादन करता है। 1 पेज का दस्तावेज़ बनाने के लिए, बस और भी सरल काम करें echo | groff -T pdf > blank.pdf
फहीम मीठा

बहुत अच्छा समाधान है, लेकिन echo .bpवास्तव में echo@FaheemMitha की तरह, द्वारा प्रतिस्थापित किया जाना चाहिए
myrdd

8

आप pdfTeX का उपयोग कर सकते हैं:

echo '\shipout\hbox{}\end' | pdftex

जो texput.pdfलगभग 900 बाइट्स का एक खाली सिंगल-पेज बनाता है , जो इमेजमैजिक का आधा उपयोग करता है।

यह आपको अपने TeX इंस्टॉलेशन के डिफ़ॉल्ट पेपर आकार की दया पर डालता है, हालाँकि। आकार को स्पष्ट रूप से सेट करने के लिए आप इसके बजाय LaTeX पर जा सकते हैं:

echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry}
      \begin{document}\shipout\hbox{}\end{document}' | pdflatex

फिर भी एक और विकल्प भूत स्क्रिप्ट के पीडीएफ ड्राइवर का उपयोग करना होगा, हालांकि आसान ps2pdfस्क्रिप्ट:

echo showpage | ps2pdf -sPAPERSIZE=letter - blank.pdf

जो TeX की तुलना में बहुत शांत है, लेकिन कम कॉम्पैक्ट आउटपुट (लगभग 2300 बाइट्स) पैदा करता है।


1
मैं वेरिएंट का उपयोग करता हूं echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf। यह 2200 बाइट्स पर थोड़ा छोटा है।
फहीम मीठा

echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry} \begin{document}\shipout\hbox{}\end{document}' | pdflatexबनाता है article.pdf। क्या इसे blank.pdfसीधे बनाना संभव है ?
फहीम मीठा

@FaheemMitha: हम्म, मैं एक खाली इनपुट के साथ ps2pdf की उम्मीद करूँगा एक पीडीएफ फाइल का उत्पादन करने के लिए जिसमें शून्य पृष्ठ होंगे - लेकिन जब मैं कोशिश करता हूं तो वास्तव में एक पृष्ठ होता है। आश्चर्य है कि कहाँ से आता है ...
हेनिंग मैखोलम

@ फहीम: टेक्सलाइव के साथ कम से कम, आप आउटपुट फाइल के बेस -jobname <basename>लाइन को कमांड लाइन पर सेट कर सकते हैं ।
हेनिंग मैखोलम

1
@ फहीममिथ: प्रत्येक \shipout\hbox{}या showpageएक पृष्ठ का उत्पादन करता है। TeX और Postcript दोनों में लूपिंग कंस्ट्रक्शंस हैं जिनका आप उपयोग कर सकते हैं, लेकिन यह संभव है कि कमांड की उपयुक्त संख्या को डुप्लिकेट करने के लिए अपनी पसंद की स्क्रिप्टिंग भाषा का उपयोग करना सरल हो।
हेनिंग मखोलम

3

रिक्त पृष्ठ के साथ एक पीडीएफ बनाने का एक आसान तरीका है rst2pdf:

echo -e '.. raw:: pdf\n\n   PageBreak' | rst2pdf -o blank.pdf

बस एक ही स्थान पर गूँज नहीं होगी, आप पृष्ठों के बिना एक पीडीएफ फाइल के साथ समाप्त हो जाएंगे (जो एक खाली फ़ाइल के समान नहीं है)।


2

कमांड लाइन पर, टाइप करें:

ps2pdf blank.pdf

कमांड ps2pdfका उपयोग पोस्टस्क्रिप्ट फाइल को पीडीएफ में बदलने के लिए किया जाता है

ps2pdf file.ps file.pdf

1
ps2pdf blank.pdfत्रुटि देता है, क्योंकि यह एक पोस्टस्क्रिप्ट फ़ाइल को तर्क के रूप में प्रदर्शित करता है। और दूसरे कमांड को पहले से मौजूद की आवश्यकता होती है file.pdf। क्या मैं कुछ भूल रहा हूँ?
फहीम मीठा

1
यह कोशिश करो: 1 touch blank.ps.; 2 ps2pdf blank.ps blank.pdf.; 3.pdftk A=1.pdf B=blank.pdf cat A1-end B output 2.pdf
विक्टोरिया स्टुअर्ट

2

अंतिम, कम से कम, यहां खाली पृष्ठ दिखाने वाला पीडीएफ बनाने का घोस्टस्क्रिप्ट तरीका है:

 gs -sDEVICE=pdfwrite -o empty.pdf -c showpage

पृष्ठ का आकार सबसे अधिक संभावना पत्र होगा। यदि आप A4 चाहते हैं, तो इसका उपयोग करें:

 gs -sDEVICE=pdfwrite -o empty.pdf -g5950x8420 -c showpage

पृष्ठभूमि:-c पैरामीटर किसी वैध पोस्टस्क्रिप्ट स्ट्रिंग, जो Ghostscript व्याख्या करने की कोशिश करेंगे के बाद किया जा सकता है। और पोस्टस्क्रिप्ट में एक खाली पृष्ठ इस लघु कोड ब्लॉक द्वारा दर्शाया गया है:

%!PS
showpage
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.