如何为html2ps添加条形码支持?

时间:2010-02-25 13:42:18

标签: perl fonts barcode

我们正在使用html2ps Perl脚本将HTML转换为PostScript。 我知道这不是最好的解决方案,但这是开发人员在这里所做的事情(这是在我的时间之前)。

现在我们需要实现对显示每个HTML并需要在每个转换后的PostScript文件中显示的条形码字体的支持。你是怎么做到的?

5 个答案:

答案 0 :(得分:6)

好的,我已经使用只使用字体(没有图像,根据需要)。方法如下:

  • 拿你的条形码字体(我对条形码一无所知,所以我采用了Code 128免费软件TrueType字体; download link)。
  • 将其设为Postcript(type 1)字体,扩展名为.pfa。我使用fontforge执行此转换,如下所示:打开ttf字体,选择文件>使用“PS Type 1(ASCII)生成字体,并解除可能的警告。
  • 现在,我将PS Type 1格式的字体“Code128bWin”放在名为Code128bWin.pfa的文件中。
  • 创建简约测试文档(test.html):
<html>
 <head></head>
 <body>
  <p>This is a test:</p>
  <h4>BARCODE</h4>
 </body>
</html>
  • 创建一个配置文件(这需要时间来理解;你不能把它作为内联CSS放在HTML中;它需要是html2ps的配置文件)。因此,创建一个名为config的文件:
H4 { font-family: Code128bWin }

@html2ps {
  font {
    Code128bWin {
      names: "Code128bWin";
      files: "Code128bWin.pfa";
    }
  }
}
  • 因此,<h4>标签中的文字将使用代码栏字体呈现。现在运行:html2ps -f config test.html > test.ps
  • 生成Postscript输出

欢迎评论!

作为旁注:这显然是丑陋的,但有时需要入侵现有流程,所以我不会判断OP。我认为这个解决方案满足所有约束:)

答案 1 :(得分:3)

所以如果在评论中看到的话是:

  1. 您无法使用之前创建的图片,这些图片使用<img /> - 标记嵌入在html中
  2. 您不能包含其他字体来创建条形码(不起作用)
  3. #1 :不可能,因为你无法存储图片?如果这是原因,请尝试使用像barcodesinc这样的在线代码创建器,例如:

    http://www.barcodesinc.com/generator/image.php?code=Hello World&style=197&type=C128B&width=200&height=50&xres=1&font=3

    示例:

    Barcode2

    如果您不能依赖外部服务提供商,可以在网上免费获得免费课程,例如: Barcode Generator。在Web服务器上部署并使用指向此脚本的<img src="http://myserver/myscript.php?code=HelloWorld"/>标记。 html2ps支持渲染内嵌图像。

    http://www.terryburton.co.uk/barcodewriter/还有一个开源的postscript条形码编写器。使用html2ps之后,您可以操作ps文件并嵌入barcodewriter指令,例如:

    50 450 moveto (978-1-86074-271) (includetext) /isbn /uk.co.terryburton.bwipp findresource exec
    

    #2 :您能提供错误讯息吗?你在哪个阶段有问题?

    嗯... #3 :仅使用html + css(只有在所有其他人都失败的情况下才会使用)

    可以使用简单的css和span-elements创建条形码:

            <style>
            .barcode {
                border:5px solid white;
                background:white;
                width:310px;
                text-align:center;
    
            }
            .ns{
                border-left:2px solid white;
                height:30;
            }
            .nb{
                border-left:2px solid black;
                height:30;
            }
            .ws{
                border-left:5px solid white;
                height:30;
            }
            .wb{
                border-left:5px solid black;
                height:30;
            }
    
        </style>
    <div class='barcode' id='bcx2_bc' ><span class='nb'></span><span class='ws'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='wb'></span><span class='ws'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ws'></span><span class='nb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ws'></span><span class='nb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='wb'></span><span class='ws'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='nb'></span><span class='ws'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='nb'></span><span class='ws'></span><span class='wb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='nb'></span><span class='ws'></span><span class='wb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ws'></span><span class='nb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='nb'></span><span class='ws'></span><span class='nb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='wb'></span><span class='ns'></span><span class='nb'></span><span class='ns'></span><br>TEST8052</div>
    

    示例:

    Barcode http://img689.imageshack.us/img689/4360/barcodeg.jpg

    此代码是使用HTML Bar Codes创建的,也是一个php类。你可以

    • 通过命令行界面调用它,并将其嵌入到每个html页面的普通html中(用于动态条形码)
    • 使用cli / server创建一次代码并将其放入html硬编码中(仅当条形码不随每个html页面更改时才适用)

    我无法想象任何其他可能性。

答案 2 :(得分:2)

我发现用字体组成的条形码相当于可怕的黑客攻击。我建议正确生成PostScript:http://www.terryburton.co.uk/barcodewriter/

答案 3 :(得分:2)

嗯,好吧,html2ps user guide有一个名为“字体块”的部分说明:

  

目前,html2ps识别字体:Times,New-Century-Schoolbook,Helvetica,Helvetica-Narrow,Palatino,Avantgarde,Bookman和Courier。

然后继续解释如何定义在html2ps中使用的新字体类型。也许这可能会有所帮助?

答案 4 :(得分:1)

也许您不需要为html2ps添加条形码支持,您只需要生成包含所需条形码图像的html页面。

您可以使用类似这样的项目来实现这一目标:barcode-generatorGNU Barcode

使用GNU条形码,这就是我要做的事情:

  1. 以EPS格式生成我需要的条形码。
  2. 使用imagemagick将其转换为html友好格式,如PNG
  3. 在html页面中使用生成的图像。
  4. 所有这一切对我来说都很容易实现/可编写脚本,如果需要,我可以在这方面提供更多帮助。