处理和打印大型文本文件

时间:2015-06-11 18:24:19

标签: php pdf graphics printing

我正在制作一个企业艺术项目,要求我:

  1. 在我们的git repo(数十万)中获取每行代码,并将它们连接成一个文件中的单行。 - 这已经完成,但文件非常大(122mb)
  2. 该文件需要以四张非常大的(3'x 8'/ 300dpi)海报转换成可用于打印店的格式(PDF,EPS等)。
  3. 这是我尝试过的:

    • Illustrator(复制/粘贴崩溃)

    • InDesign(崩溃)

    • Acrobat(崩溃)

    • PHP(我可以将文件显示在足够大的网页上,但任何类型的print-to-pdf等只会让我的浏览器死掉 - 请参阅下面的代码)

    -

    $READ_LEN = 64*1024; 
    $MAX_BUF_LEN = 2*$READ_LEN; 
    
    $url = "../thisisit.txt"; 
    $handle = fopen($url, "r") or die("Couldn't get handle");
    if ($handle) {
        while (!feof($handle)) {
            $buffer = fgets($handle, 4096);
            // Process buffer here..
            echo htmlentities($buffer);
        }
        fclose($handle);
    }
    

    我的问题如下:

    • 有没有更好的方法来处理这个大小的文本文件?

    • 有没有办法将文本文件的输出(通过像cat这样的shell命令)直接流式传输到PDF包装器中?

    • 我试图这样做是疯了吗?

1 个答案:

答案 0 :(得分:0)

我使用XSL FO为您做了一个简短的测试(使用RenderX XEP)。我相信它可以,但我相信你需要做一些计算。我创建了一个页面,其大小与你说的一样,没有任何边距,里面有一些文字(大约3.2MB)。格式化为1pt字体大小约占96inx36in页面大小的1/6。

Figure 1: Partial document snapshot

XSL FO很简单:

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    font-family="Courier" font-size="1pt">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="backgrad" page-width="8*12in" page-height="3*12in">
            <fo:region-body/>
            <fo:region-before extent="11in"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="backgrad">
        <fo:flow flow-name="xsl-region-body">
            <fo:block>
                hjdskjhdkh dskjhdskjhsd kjsdkjsd jksd ksdkjsdkj 
    <!-- snipped -->

The resulting PDF @ 600% zoom

你需要64位机器和64位Java,内存大约2GB。我做了另一个23MB的测试,它几乎填满了PDF的页面。您可能适合0.7或0.8pt字体。

这是一个样本28MB文本文件@ 1pt字体 - 它溢出到两页。提示:不要使用浏览器查看它,即使它只有127kb也无法处理这个PDF。下载并使用Adobe Reader。提示2:如果你下载并打开它,它可能看起来像一个大的黑色斑点。你需要放大至约400%至少开始看东西。它是36英寸高纸上的1/72英寸字体或每页约2500行文本。 Poster PDF