~tkluck/ubuntu/oneiric/xournal/my-selected-patches

« back to all changes in this revision

Viewing changes to src/xo-print.c

  • Committer: auroux
  • Date: 2009-11-15 05:06:00 UTC
  • Revision ID: vcs-imports@canonical.com-20091115050600-hucmu84pf4t3jvzg
fix x86_64 bug in PDF export code (#2897699)

Show diffs side-by-side

added added

removed removed

Lines of Context:
761
761
 
762
762
  make_xref(xref, xref->last+1, pdfbuf->len);
763
763
  g_string_append_printf(pdfbuf, 
764
 
    "%d 0 obj\n<< /Length %d /Filter /FlateDecode /Type /Xobject "
 
764
    "%d 0 obj\n<< /Length %zu /Filter /FlateDecode /Type /Xobject "
765
765
    "/Subtype /Image /Width %d /Height %d /ColorSpace /DeviceRGB "
766
766
    "/BitsPerComponent 8 >> stream\n",
767
767
    xref->last, zpix->len, width, height);
840
840
  gboolean fallback, is_binary;
841
841
  guchar encoding[256];
842
842
  gushort glyphs[256];
843
 
  int i, j, num, len1, len2;
844
 
  gsize len;
 
843
  int i, j, num;
 
844
  guint32 len1, len2;
 
845
  guint32 tt_len;
 
846
  gsize t1_len;
845
847
  TrueTypeFont *ttfnt;
846
848
  char *seg1, *seg2;
847
849
  char *fontdata, *p;
862
864
      }
863
865
    font->num_glyphs_used = num-1;
864
866
    if (OpenTTFont(font->filename, 0, &ttfnt) == SF_OK) {
865
 
      if (CreateTTFromTTGlyphs_tomemory(ttfnt, (guint8**)&fontdata, &len, glyphs, encoding, num, 
 
867
      if (CreateTTFromTTGlyphs_tomemory(ttfnt, (guint8**)&fontdata, &tt_len, glyphs, encoding, num, 
866
868
                   0, NULL, TTCF_AutoName | TTCF_IncludeOS2) == SF_OK) {
867
869
        make_xref(xref, xref->last+1, pdfbuf->len);
868
870
        nobj_fontprog = xref->last;
869
871
        g_string_append_printf(pdfbuf, 
870
 
          "%d 0 obj\n<< /Length %d /Length1 %d >> stream\n",
871
 
          nobj_fontprog, (int)len, (int)len);
872
 
        g_string_append_len(pdfbuf, fontdata, len);
 
872
          "%d 0 obj\n<< /Length %u /Length1 %u >> stream\n",
 
873
          nobj_fontprog, tt_len, tt_len);
 
874
        g_string_append_len(pdfbuf, fontdata, tt_len);
873
875
        g_string_append(pdfbuf, "endstream\nendobj\n");
874
876
        g_free(fontdata);
875
877
      }
879
881
    else fallback = TRUE;
880
882
  } else {
881
883
  // embed the font file: Type1 case
882
 
    if (g_file_get_contents(font->filename, &fontdata, &len, NULL) && len>=8) {
 
884
    if (g_file_get_contents(font->filename, &fontdata, &t1_len, NULL) && t1_len>=8) {
883
885
      if (fontdata[0]==(char)0x80 && fontdata[1]==(char)0x01) {
884
886
        is_binary = TRUE;
885
887
        len1 = pfb_get_length((unsigned char *)fontdata+2);
898
900
          if (*p=='\n' || *p=='\r') p++;
899
901
          if (*p=='\n' || *p=='\r') p++;
900
902
          len1 = p-fontdata;
901
 
          p = g_strrstr_len(fontdata, len, T1_SEGMENT_3_END);
 
903
          p = g_strrstr_len(fontdata, t1_len, T1_SEGMENT_3_END);
902
904
          if (p==NULL) fallback = TRUE;
903
905
          else {
904
906
            // rewind 512 zeros
936
938
        make_xref(xref, xref->last+1, pdfbuf->len);
937
939
        nobj_fontprog = xref->last;
938
940
        g_string_append_printf(pdfbuf, 
939
 
          "%d 0 obj\n<< /Length %d /Length1 %d /Length2 %d /Length3 0 >> stream\n",
 
941
          "%d 0 obj\n<< /Length %u /Length1 %u /Length2 %u /Length3 0 >> stream\n",
940
942
          nobj_fontprog, len1+len2, len1, len2);
941
943
        g_string_append_len(pdfbuf, seg1, len1);
942
944
        g_string_append_len(pdfbuf, seg2, len2);
1258
1260
      tmpstr = make_pdfprefix(pdfinfo.pages+(pg->bg->file_page_seq-1),
1259
1261
                              pg->width, pg->height);
1260
1262
      g_string_append_printf(pdfbuf,
1261
 
        "%d 0 obj\n<< /Length %d >> stream\n%s\nendstream\nendobj\n",
 
1263
        "%d 0 obj\n<< /Length %zu >> stream\n%s\nendstream\nendobj\n",
1262
1264
        n_obj_prefix, tmpstr->len, tmpstr->str);
1263
1265
      g_string_free(tmpstr, TRUE);
1264
1266
      g_string_prepend(pgstrm, "Q Q Q ");
1276
1278
    
1277
1279
    make_xref(&xref, xref.last+1, pdfbuf->len);
1278
1280
    g_string_append_printf(pdfbuf, 
1279
 
      "%d 0 obj\n<< /Length %d /Filter /FlateDecode>> stream\n",
 
1281
      "%d 0 obj\n<< /Length %zu /Filter /FlateDecode>> stream\n",
1280
1282
      xref.last, zpgstrm->len);
1281
1283
    g_string_append_len(pdfbuf, zpgstrm->str, zpgstrm->len);
1282
1284
    g_string_free(zpgstrm, TRUE);