首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用libharu和vala创建pdfs

用libharu和vala创建pdfs
EN

Stack Overflow用户
提问于 2011-10-16 06:50:41
回答 1查看 978关注 0票数 1

我想知道是否有人能给我指点如何从vala语言动态地创建pdf文件(而不必将文件保存为pdf)。我听说它可以用libharu来完成,所以我一直在查看他们的文档,但对我来说还有点模糊。有人知道怎么做吗..。

从用vala创建的UI中发送书面注释/文本到libharu?让libharu从里面创建一个pdf?

我会很感激你的帮助。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-07-26 16:47:14

即使这个问题很老,我也需要类似的东西.

就像尼米库说的,你需要写一个vapi来包装图书馆。

这是一个基于libhpdf 2.0.8 (不是最新版本)的最小版本。

===文件名: haru.vapi ===

代码语言:javascript
复制
[CCode(cheader_filename="hpdf.h", cprefix="HPDF_")]
namespace HPDF {
    [CCode(cname="HPDF_STATUS")]
    public struct Status : ulong {
    }

    [CCode(cname="HPDF_REAL")]
    public struct Real : float {
    }

    [CCode(cname="HPDF_Error_Handler", instance_pos = -1)]
    public delegate void ErrorHandler (Status error_no, Status detail_no);

    [Compact]
    [CCode(free_function="HPDF_Free", cname="HPDF_Doc")]
    public class Doc {
        [CCode(cname="HPDF_New", instance_pos = -1)]
        public Doc (ErrorHandler error_handler);

        [CCode(cname="HPDF_AddPage")]
        public unowned Page add_page();

        [CCode(cname="HPDF_GetFont")]
        public unowned Font get_font(string name, string? encoding = null);

        [CCode(cname="HPDF_SaveToFile")]
        public Status save_to_file (string file);
    }

    [Compact]
    [CCode(cname="HPDF_Page")]
    public class Page {
        [CCode(cname="HPDF_Page_SetFontAndSize")]
        public Status set_font_and_size (Font font, float size);

        [CCode(cname="HPDF_Page_BeginText")]
        public Status begin_text ();

        [CCode(cname="HPDF_Page_EndText")]
        public Status end_text ();

        [CCode(cname="HPDF_Page_TextOut")]
        public Status text_out (Real x, Real y, string chars);

        [CCode(cname="HPDF_Page_SetCharSpace")]
        public Status set_char_space (Real value);

        [CCode(cname="HPDF_Page_SetWordSpace")]
        public Status set_word_space (Real value);
    }

    [Compact]
    [CCode(cname="HPDF_Font")]
    public class Font {
    }
}

然后你就可以从瓦拉那里消费了。

===文件名: text_demo.vala ===

代码语言:javascript
复制
using HPDF;

public class Demos.TextDemo {
    private void error_handler (Status error_no, Status detail_no) {
        stderr.printf("Error %d - detail %d\n", (int)error_no, (int)detail_no);
    }

    public void run (string filename) {
        string samp_text2 = "The quick brown fox jumps over the lazy dog.";

        Doc pdf = new Doc(this.error_handler);
        unowned Page page = pdf.add_page ();
        unowned Font font;

        font = pdf.get_font ("Helvetica");

        page.set_font_and_size (font, 24);

        /* char-spacing 0 */
        page.begin_text ();
        page.text_out (60, 140, samp_text2);
        page.end_text ();

        /* char-spacing 1.5 */
        page.set_char_space (1.5f);

        page.begin_text ();
        page.text_out (60, 100, samp_text2);
        page.end_text ();

        /* char-spacing 1.5, word-spacing 3.5 */
        page.set_word_space (2.5f);

        page.begin_text ();
        page.text_out (60, 60, samp_text2);
        page.end_text ();

        /* save the document to a file */
        stderr.printf("Writing pdf to: %s\n", filename);
        pdf.save_to_file (filename);
    }
}

public static int main(string[] args) {
    new Demos.TextDemo().run (args[1]);

    return 0;
}

要编译(在windows上试用,您需要调整路径):

valac -C --保存-- text_demo.vala --蒸气。-pkg haru

gcc -g -o text_demo.exe text_demo.c -I ./ libharu-2.0.8 /include -l libharu-2.0.8 -L libhpdf -mms-bitfields IC:/Src/Tools/opt/include/glib-2.0 -IC:/Src/Tools/opt/lib/glib-2.0/include -LC:/Src/Tools/opt/lib -lglib-2.0 -lintl -lgobject-2.0

并且要跑:

text_demo.exe test.pdf

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7782836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档