ฉันจะแปลงเอกสารคำเป็น PDF ได้อย่างไร


10

ช่วยพวกงานที่มอบหมายฉันบอกว่ามันต้องอยู่ในรูปแบบ. pdf แต่ฉันทำได้ใน Word ฉันติดอยู่จริงๆ

ฉันจะใช้เอกสารคำในรูปแบบ. docx และสร้าง. pdf ที่มีข้อความทั้งหมดได้อย่างไร คะแนนโบนัสหากมันมีภาพทั้งหมดและการจัดรูปแบบใด ๆ แต่ข้อความเป็นขั้นต่ำเปล่า ไฟล์ตัวอย่างที่ฉันจะใช้จะเป็นไฟล์นี้ถึงแม้ว่าโซลูชันของคุณควรเป็นแบบทั่วไป

ฉันไม่ต้องการให้ผ่านขั้นตอนการประมวลผลที่ไม่จำเป็นเพียงแค่เข้ารหัสแล้วถอดรหัสเอกสารใน base64 หรืออะไรก็ตามที่ไม่ได้อยู่ในจิตวิญญาณของคำถามแม้ว่าการใช้ความคิดสร้างสรรค์cowsayจะเป็นข้อยกเว้น ใช้กฎมาตรฐานของการหมุนรอบรหัส - การแก้ปัญหาควรถูกต้องทางเทคนิคทุกขั้นตอนควรมีความจำเป็นทางเทคนิคผลที่ได้ควรไร้ประโยชน์ทางเทคนิค นี่ควรเป็นรายการรูปแบบ "Rube Goldberg" มากกว่าการแข่งขันที่ทำให้งงงวยและการแข่งขันที่น่าเบื่อหน่าย

โหวตขึ้นมากที่สุดสำหรับคำตอบอื่นที่ไม่ใช่ของฉันเองโดย 5/1/14 ชนะ

หมายเหตุ: นี่เป็นคำถามการกรุณาอย่าใช้คำถามและ / หรือคำตอบอย่างจริงจัง ข้อมูลเพิ่มเติมที่นี่


2
การมอบหมายนี้ซับซ้อน แต่ฉันแน่ใจว่าวิธีการที่เหมาะสมเพียงอย่างเดียวคือใช้ Preview Handler ในแอพพลิเคชั่น WPF ถ่ายภาพหน้าจอนั้นบันทึกบิตแมปเป็น GIF แล้วพิมพ์เป็น PDF
Mathias R Jessen

การล๊อคโค้ดอยู่ในขั้นตอนการลบออกตามท่าทางทางการ โพสต์นี้มีจำนวนคะแนนโหวตที่เป็นธรรมสำหรับคำถามและคำตอบและแม้ว่าจะได้รับคะแนนโหวตมากกว่า 50% "ลบ" ในแบบสำรวจมันเป็นหนึ่งในโพสต์ [code-trolling] ที่ระบุไว้อย่างดี ดังนั้นฉันกำลังล็อคมันเพื่อความสำคัญทางประวัติศาสตร์
Doorknob

คำตอบ:


24

ตกลงนี่เป็นเรื่องยุ่งยากเล็กน้อย แต่ไม่เลวร้ายนักเพราะ pdf ใช้รูปแบบกราฟิกเดียวกันกับ postscript ซึ่งหมายความว่าเมื่อคุณมี postscript แล้วมันค่อนข้างง่ายที่จะแปลงเป็น PDF และ Postcript เป็นวิธีการขับเคลื่อนเครื่องพิมพ์ทั้งหมดที่คุณต้องทำเพื่อพิมพ์ รับ postscript

ตอนนี้คุณสามารถเขียนโปรแกรมเพื่อแปลง postscript เป็น pdf แต่เราไม่จำเป็นต้องมี ghostscript ซึ่งเขียนขึ้นสำหรับ unix และใช้งานได้ดีบน linux (ไม่มีความแตกต่างที่สำคัญสำหรับโครงการนี้) น่าเสียดายที่คำทำงานบน windows เท่านั้นดังนั้นคุณต้องใช้คอมพิวเตอร์สองเครื่องและเพื่อโน้มน้าวให้ windows เห็นว่าคอมพิวเตอร์ linux เป็นเครื่องพิมพ์ที่คุณต้องใช้สายเคเบิลอนุกรมและโมเด็ม null หากคอมพิวเตอร์ของคุณไม่มีพอร์ตอนุกรม usb กับตัวแปลง rs232 ก็ใช้ได้ (ฉันแนะนำให้ใช้กับชิปเซ็ต fttdi) ตอนนี้เชื่อมต่อคอมพิวเตอร์สองเครื่องด้วยสายเคเบิลอนุกรมและโมเด็ม null และตรวจสอบว่าคุณสามารถสื่อสารได้ (ตรวจสอบให้แน่ใจว่าพารามิเตอร์ของคุณตรงกัน)

ตกลงตอนนี้ที่คุณให้พวกเขาพูดถึงเวลาที่จะโน้มน้าวกล่อง windows ของคุณว่ากล่อง linux เป็นเครื่องพิมพ์: เพียงติดตั้งไดรเวอร์เครื่องพิมพ์สำหรับ applewriter II และบอกว่ามันเชื่อมต่อกับพอร์ตอนุกรม ตอนนี้เมื่อคุณพิมพ์คุณส่ง postscript ไปที่กล่อง linux ขั้นตอนต่อไปคือการบันทึกเป็นไฟล์

ทีนี้ก็ไปที่กล่อง linux ของคุณแล้วใช้คำสั่งง่ายๆนี้:

dd -if=/dev/ttyS0 -of=- -bs=1 | ps2pdf - - | sed -e '' >tmpfile && mv tmpfile file.pdf

และเรียบง่ายเหมือนที่คุณทำ


สิ่งนี้สามารถใช้งานได้จริง (ถ้าคุณส่งสัญญาณไปยัง dd เมื่อเสร็จแล้ว) แต่มีวิธีที่ง่ายกว่าเช่นการพิมพ์ไปยังไฟล์และเรียกใช้ gostscript บนกล่อง windows ของคุณและถึงแม้ว่า fttdi จะทำ usb คุณภาพดีให้กับตัวแปลงอนุกรม ความเจ็บปวดในการติดตั้งไดรเวอร์


2
แม้ว่าการทดสอบนี้จะเกินความหมายของฉัน แต่การอ่านพื้นหลังเล็กน้อยแสดงให้เห็นว่านี่เป็นทั้งที่ถูกต้องและน่ากลัว การทำงานที่ดี!
ymbirtt

6
ฉันคิดเกี่ยวกับการรวมถึงคำแนะนำในการสร้างโมเด็มแบบ null ดังนั้นจำเป็นต้องใช้หัวแร้ง
hildred

13

วันนี้เครื่องพิมพ์จำนวนมากเป็นเครื่องพิมพ์ / สแกนเนอร์รวมกับตัวป้อนเอกสารอัตโนมัติ มันจะง่าย

  1. พิมพ์เอกสาร
  2. สแกนงานพิมพ์

3
นี่คือสิ่งที่ผู้คนทำ ... ฉันหวังว่าฉันล้อเล่น และนี่คือการใช้รหัสหลอกรหัสของคุณอยู่ที่ไหน
Derobert

9

PHP

รหัสนี้สร้างไฟล์ PDF ที่ควรพิมพ์ออกมาอย่างสมบูรณ์บนเครื่องทิกเกอร์เทปของคุณ หากคุณต้องการดูไฟล์ PDF บนจอภาพของคุณคุณอาจต้องขยายภาพเล็กน้อย

ตัวอย่างเอกสารต้นฉบับ เอกสารคำ

เอาท์พุท PDF (ดูในเบราว์เซอร์) มุมมองบางส่วนของเอกสาร PDF

รหัสแหล่งที่มา

<?php

header("Content-Type: application/pdf");

$s = docx2txt("word-file.docx"); // <-- Insert filename here!
echo txt2pdf($s);


function docx2txt($filename) {
  if (!($z=zip_open($filename))) return false; // Can't open file
  while ($r=zip_read($z)) {
    if (zip_entry_name($r)!="word/document.xml") continue;
    if (!zip_entry_open($z,$r)) return false; // Can't open XML data
    for ($s="";;) {
      $c=zip_entry_read($r);
      if ($c===false || $c=="") break;
      $s.=$c;
    }
    return trim(preg_replace('/\s+/',' ',preg_replace('/<[^>]*>/','',$s)));
  }
  return false; // Can't find XML data
}


function txt2pdf($text) {
  $width="".ceil(strlen($text)*7.2);
  $text=str_replace('(','\050',str_replace(')','\051',$text));
  $length=strlen($text);
  $wlen=strlen($width);
  $len4="".(44+$length);
  $xr3=sprintf("%010d",174+$wlen);
  $xr4=sprintf("%010d",449+$wlen);
  $xrstart=544+$wlen+strlen($len4)+$length;
  return "%PDF-1.1\n%¥±ë\n\n1 0 obj\n  << /Type /Catalog\n     /Pages 2 0 R\n" .
         "  >>\nendobj\n\n2 0 obj\n  << /Type /Pages\n     /Kids [3 0 R]\n   " .
         "  /Count 1\n     /MediaBox [0 0 $width 14]\n  >>\nendobj\n\n3 0 obj" .
         "\n  <<  /Type /Page\n      /Parent 2 0 R\n      /Resources\n       " .
         "<< /Font\n           << /F1\n               << /Type /Font\n       " .
         "           /Subtype /Type1\n                  /BaseFont /Courier\n " .
         "              >>\n           >>\n       >>\n      /Contents 4 0 R\n" .
         "  >>\nendobj\n\n4 0 obj\n  << /Length $len4 >>\nstream\n  BT\n    /" .
         "F1 12 Tf\n    0 3 Td\n    ($text) Tj\n  ET\nendstream\nendobj\n\nxr" .
         "ef\n0 5\n0000000000 65535 f \n0000000018 00000 n \n0000000077 00000" .
         " n \n$xr3 00000 n \n$xr4 00000 n \ntrailer\n  <<  /Root 1 0 R\n    " .
         "  /Size 5\n  >>\nstartxref\n$xrstart\n%%EOF";
}

?>

หมายเหตุ: txt2pdf()ฟังก์ชั่นนี้ใช้ไฟล์ PDF ขนาดเล็กที่สุดที่ผลิตโดย Brendan Zagaeski


โทรลล์อยู่ที่ไหน
Nacib Neme

5

บนระบบ UNIX:

mv document.docx document.pdf && cowsay "code-trolling is cool"

บน Windows:

ren document.docx document.pdf

3
หมายเหตุ: จะไม่ทำงานแน่นอน ... เพิ่งพบว่ามันตลก
s3lph

4

ฉันเชื่อว่าเชลล์สคริปต์นี้เป็นวิธีที่ง่ายและใช้งานง่ายในการแก้ปัญหา มีวิธีที่ดีกว่า?

( echo $'<svg>\n<text y="10">';
  unzip -p ./YOUR_FILENAME_HERE.docx word/document.xml |
  sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g';
  echo $'\n</text>\n</svg>' ) |
inkscape -f /dev/fd/0 -D -A ./OUTPUT_FILENAME_HERE.pdf

1
"ทำไมการแลกเปลี่ยนนี้ถึงฟลอปปี้?";)
hildred

2

ลิงค์นี้จะช่วยคุณได้อย่างแน่นอน http://javahive.in/convert-word-doc-to-pdf-file-in-java/คุณเพียงแค่เรียกใช้รหัสจาวานี้และไฟล์ PDF ของคุณจะอยู่ที่นั่นเพื่อคุณ


คงจะสนุกกว่านี้ถ้ามันเป็นแค่ลิงค์
Mr Lister

0

Windows Batch

วิธีที่ง่ายที่สุดในการแปลงไฟล์: เปลี่ยนนามสกุล!

:: convert.cmd

xcopy "%~dpnx0" "%~dpn0.pdf"

สปอยเลอร์ / โทรลล์: (วางเมาส์ด้านล่างเพื่อดู)

โอ๊ะโอ ... ฉันลืมไปเลยว่าคุณสามารถแปลงแม้แต่ไฟล์ที่มี.exeนามสกุล? มากสำหรับที่ ... ;) นอกจากนี้ฉันขี้เกียจเกินกว่าที่จะกำหนดรหัสยาม
และฉันคิดว่าฉันจะเพิ่มการหมุนรอบพิเศษนี้: มันไม่ได้แตะต้องข้อมูลด้านใน ... (ไม่แยกวิเคราะห์เพื่อให้เป็น PDF ที่ถูกต้อง)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.