2010-07-15 21 views
5

मैं कुछ लाटेक्स कोड उत्पन्न करने की कोशिश कर रहा हूं, जिसमें से पीडीएफ दस्तावेज़ उत्पन्न करना चाहिए। वर्तमान में, मैं गतिशील रूप से कोड बनाने के लिए Django templating सिस्टम का उपयोग कर रहा हूं, लेकिन मुझे इस बारे में कोई जानकारी नहीं है कि यहां से कैसे आगे बढ़ना है। मैं समझता हूं कि मैं कोड को .tex फ़ाइल में सहेज सकता हूं, और पीडीएफ उत्पन्न करने के लिए pdflatex चलाने के लिए उपप्रोसेसर का उपयोग कर सकता हूं। लेकिन मुझे "सादे" पायथन में लाटेक्स कोड से बचने में इतनी परेशानी हुई कि मैंने Django templating प्रणाली का उपयोग करने का फैसला किया। क्या कोई तरीका है कि मैं किसी भी तरह से Django द्वारा pdflatex में उत्पादित आउटपुट पाइप कर सकता हूं? उत्पादित कोड ठीक से काम कर रहा है, यह सिर्फ इतना है कि मुझे नहीं पता कि इसके साथ क्या करना है।मैं लाटेक्स का उपयोग करके प्रोग्रामेटिक रूप से पीडीएफ कैसे उत्पन्न कर सकता हूं?

अग्रिम धन्यवाद

उत्तर

5

मैं एक परियोजना मैं था में एक ही मुद्दे से निपटने की गई थी पहले से, और बदले उत्पादन पाइपिंग, मैं, एक अस्थायी फ़ोल्डर में अस्थायी फ़ाइलों को बनाया के बाद से मैं मध्यवर्ती से निपटने के बारे में चिंतित था पर काम किया फाइलें लाटेक्स उत्पादन करती है। यह वह कोड है जिसका मैंने उपयोग किया था (ध्यान दें कि यह कुछ साल पुराना है, जब से मैं अभी भी पाइथन/डीजेगो के लिए नया था; मुझे यकीन है कि अगर मैं आज यह लिख रहा था तो मैं कुछ बेहतर तरीके से आ सकता था, लेकिन यह निश्चित रूप से मेरे लिए काम करता था):

import os 
from subprocess import call 
from tempfile import mkdtemp, mkstemp 
from django.template.loader import render_to_string 
# In a temporary folder, make a temporary file 
tmp_folder = mkdtemp() 
os.chdir(tmp_folder)   
texfile, texfilename = mkstemp(dir=tmp_folder) 
# Pass the TeX template through Django templating engine and into the temp file 
os.write(texfile, render_to_string('tex/base.tex', {'var': 'whatever'})) 
os.close(texfile) 
# Compile the TeX file with PDFLaTeX 
call(['pdflatex', texfilename]) 
# Move resulting PDF to a more permanent location 
os.rename(texfilename + '.pdf', dest_folder) 
# Remove intermediate files 
os.remove(texfilename) 
os.remove(texfilename + '.aux') 
os.remove(texfilename + '.log') 
os.rmdir(tmp_folder) 
return os.path.join(dest_folder, texfilename + '.pdf') 

dest_folder चर आम तौर पर, मीडिया निर्देशिका में कहीं पर सेट किया जाता है, ताकि पीडीएफ तो स्थिर परोसा जा सकता है। वापस दिया गया मान डिस्क पर फ़ाइल का पथ है। जो भी फ़ंक्शन dest_folder सेट करता है, उसके यूआरएल का क्या तर्क होगा इसका तर्क।

+0

धन्यवाद! लेकिन मुझे अभी भी एक मुद्दा है। क्या किसी भी तरह से मौजूदा फाइल पर टेम्पलेटिंग इंजन का उपयोग संभव होगा? तो, यह चर बदलता है? और मैं एक उचित टेक्सास फ़ाइल में लिख सकता था। एटीएम मेरे पास फ़ाइल में संग्रहीत टेम्पलेट सिस्टम sytanx में कोड है। –

+1

मुझे यकीन नहीं है कि मैं आपके प्रश्न का पूरी तरह से पालन करता हूं, लेकिन ऊपर दिए गए उदाहरण में, "tex/base.tex" टेम्पलेट निर्देशिका में एक टीएक्स फ़ाइल है जिसमें Django templating टैग/फ़िल्टर भी इसके अंदर है, जो चर द्वारा प्रतिस्थापित किया जाता है जब यह 'render_to_string()' के माध्यम से जाता है। अगर आप किसी भी पुरानी फ़ाइल (टेम्पलेट निर्देशिकाओं के बाहर से) लोड करना चाहते हैं, तो आप यह कर सकते हैं: 't = टेम्पलेट (खुला ('/ path/to/your/file.tex')। पढ़ें()); os.write (texfile, t.render (संदर्भ ({'var': 'जो भी'}))। 'यदि आप किसी विशेष स्थान पर लिखना चाहते हैं, तो करें:' os.write (open ('/ path/to/new /file.tex ',' w ')। fileno(), t.render (...)) ' –

+0

ठीक है, एक सेकंड के लिए मैंने आपके कोड को गलत समझा, अब यह ठीक है: डी। एक अजीब बग एटीएम से निपटना, डुनो अगर यह संबंधित है। –

संबंधित मुद्दे

 संबंधित मुद्दे