Word belgesini pdf'ye nasıl dönüştürebilirim?


10

Atamamın atamamın .pdf biçiminde olması gerektiğini söylüyor, ancak Word'de yaptım. Gerçekten takıldım.

Word belgesini .docx biçiminde nasıl alırım ve ondan tüm metni içeren bir .pdf dosyası nasıl oluştururum? Bonus ayrıca tüm görüntüleri ve herhangi bir formatı içeriyorsa, ancak metin minimumdur. Kullanacağım örnek dosya bu olacak , ancak çözümünüz genel olmalı.

Herhangi bir gereksiz işlem adımından geçmesini istemiyorum - basitçe belgeyi base64'de veya sorunun ruhunda olmayan her şeyi kodladıktan sonra kodunu çözmek, ancak yaratıcı kullanımı cowsaybunun bir istisnası olacak. Standart kod trolling kuralları geçerlidir - çözüm teknik olarak doğru olmalı, tüm adımlar teknik olarak gerekli olmalı, sonuç teknik olarak işe yaramaz olmalıdır. Bu bir "Rube Goldberg" tarzı program olmaktan ziyade bir gizlilik ve tıkanıklık yarışmasından daha fazla olmalıdır.

5/1/14 benimkiler dışındaki cevaplarda en çok oylar kazanır.

Not: Bu bir sorusudur. Lütfen soruyu ve / veya cevapları ciddiye almayın. Daha fazla bilgi burada .


2
Bu atama çok karmaşık, ancak tek uygun yaklaşımın bir WPF uygulamasında bir Önizleme İşleyicisi kullanmak, bunun bir ekran görüntüsünü almak, bitmap'i GIF olarak kaydetmek ve daha sonra bunu PDF olarak yazdırmak olduğundan eminim
Mathias R Jessen

Kod trollemesi, resmi duruşa göre kaldırılma sürecindedir . Bu yazı, soru ve cevaplar üzerinde adil bir oy sayısına sahiptir ve ankette % 50'den fazla "sil" oyu almasına rağmen , daha iyi belirlenmiş [kod trolling] mesajlarından biridir. Bu nedenle, tarihsel önem için kilitliyorum.
Kapı tokmağı

Yanıtlar:


24

Tamam bu biraz zor ama çok kötü değil, çünkü pdf postscript ile aynı grafik modelini kullanıyor, bu da postscript'e sahip olduğunuzda pdf'ye dönüştürmenin oldukça önemsiz olduğu ve postscript'in yazıcıları sürmenin yolu postscript alın.

Şimdi postscript'i pdf'ye dönüştürmek için bir program yazabilirsiniz, ancak unix için yazılan ve linux'da iyi çalışan ghostscript yoktur (bu proje için önemli bir fark yok). Ne yazık ki kelime sadece pencerelerde çalışıyor, bu yüzden iki bilgisayara ihtiyacınız var ve pencereleri linux bilgisayarın bir yazıcı olduğuna ikna etmek için bir seri kabloya ve bir boş modeme ihtiyacınız var. Bilgisayar (lar) seri portlar rs232 dönüştürücüler usb yoksa gayet iyi çalışır (Ben bir fttdi yonga seti olanları öneririz). Şimdi iki bilgisayarı seri kablo ve boş modem ile bağlayın ve iletişim kurabildiğinizi doğrulayın (parametrelerinizin eşleştiğinden emin olun).

Şimdi onları konuştuğunuza göre, windows kutunuzu linux kutusunun bir yazıcı olduğuna ikna etmenin zamanı geldi: sadece applewriter II için yazıcı sürücüsünü yükleyin ve seri bağlantı noktasına bağlı olduğunu söyleyin. Şimdi yazdırdığınızda linux kutusuna postscript gönderirsiniz. bir sonraki adım dosyayı bir dosya olarak kaydetmek.

Şimdi linux kutunuza gidin ve şu basit komutu kullanın:

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

ve bu kadar basit.


Bu aslında işe yarayabilir (bitirdiğinizde dd'ye bir sinyal gönderirseniz), ancak bir dosyaya yazdırma ve windows kutunuzda gostscript çalıştırma gibi daha kolay yollar vardır ve fttdi seri dönüştürücülere kaliteli usb yapmasına rağmen sürücüleri yüklemek için kraliyet acısı.


2
Bunu test etmek benim yolumun ötesinde olsa da, biraz arka plan okuması bunun hem geçerli hem de korkunç olduğunu gösteriyor. İyi iş!
ymbirtt

6
Bir boş modem yapmak için talimatlar eklemeyi düşündüm, bu yüzden bir havya gerekiyordu.
Aralık'ta

13

Günümüzde birçok yazıcı, otomatik belge besleyicili birleşik yazıcı / tarayıcıdır. Basit olacak.

  1. Belgeyi yazdırın.
  2. Baskıyı tarayın.

3
Actuallynsanlar bunu böyle yapar ... Keşke ţaka yapmýţ olsaydým. Ve bu kod trolling , kodunuz nerede?
derobert

9

PHP

Bu kod, şerit bant makinenizde mükemmel şekilde yazdırılması gereken PDF dosyaları üretir . PDF dosyalarını monitörünüzde görüntülemek istiyorsanız, biraz yakınlaştırmanız gerekebilir.

Örnek kaynak belge Word belgesi

PDF çıktısı (tarayıcıda görüntülenir) PDF belgesinin kısmi görünümü

Kaynak kodu

<?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";
}

?>

Not: txt2pdf()İşlev, Brendan Zagaeski tarafından yapılan minimal bir PDF dosyasına dayanmaktadır.


Trol nerede?
Nacib Neme

5

UNIX sistemlerinde:

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

Windows'ta:

ren document.docx document.pdf

3
not: elbette işe yaramaz ... Sadece komik buldum
s3lph

4

Bu kabuk betiğinin problemi çözmek için basit ve sezgisel bir yöntem olduğuna inanıyorum. Daha iyi bir yol var mı?

( 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
"Bu neden disket takas?";)
hildred


0

Windows Toplu İş

Bir dosyayı dönüştürmenin en kolay yolu: uzantıyı değiştirin!

:: convert.cmd

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

Spoiler / troll: (görmek için aşağıya gelin)

Hata! .exeUzantısı olan bir dosyayı bile dönüştürebileceğinizi unuttum mu? Bunun için çok fazla ...;) Ayrıca, gardiyanları kodlamak için çok tembelim.
Ve buna biraz daha trol ekleyeceğimi düşündüm: içerideki verilere bile dokunmuyor ... (geçerli bir PDF yapmak için ayrıştırmıyor)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.