static float pdf_extract_font_size(pdf_xref *xref, char *appearance, char **font_name) { fz_context *ctx = xref->ctx; fz_stream *stream = fz_open_memory(ctx, appearance, strlen(appearance)); float font_size = 0; int tok, len; *font_name = NULL; do { fz_error error = pdf_lex(&tok, stream, xref->scratch, sizeof(xref->scratch), &len); if (error || tok == PDF_TOK_EOF) { fz_free(ctx, *font_name); *font_name = NULL; break; } if (tok == PDF_TOK_NAME) { fz_free(ctx, *font_name); *font_name = fz_strdup(ctx, xref->scratch); } else if (tok == PDF_TOK_REAL || tok == PDF_TOK_INT) { font_size = fz_atof(xref->scratch); } } while (tok != PDF_TOK_KEYWORD || strcmp(xref->scratch, "Tf") != 0); fz_close(stream); return font_size; }
static void fz_decode_tiff_jpeg(struct tiff *tiff, fz_stream *chain, unsigned char *wp, int wlen) { fz_stream *stm; fz_stream *jpegtables = NULL; if (tiff->jpegtables && (int)tiff->jpegtableslen > 0) jpegtables = fz_open_memory(tiff->ctx, tiff->jpegtables, (int)tiff->jpegtableslen); /* cf. https://code.google.com/p/sumatrapdf/issues/detail?id=2370 */ stm = fz_open_dctd(chain, tiff->photometric != 2 && tiff->photometric != 3 ? -1 : 0, 0, jpegtables); fz_read(stm, wp, wlen); fz_close(stm); }
static fz_obj * pdf_dict_from_string(pdf_xref *xref, char *string) { fz_context *ctx = xref->ctx; fz_obj *result = NULL; fz_stream *stream = fz_open_memory(ctx, string, strlen(string)); pdf_parse_stm_obj(&result, NULL, stream, xref->scratch, sizeof(xref->scratch)); fz_close(stream); return result; }
fz_stream *MuPDFDoc::OpenStream(unsigned char *buffer, int bufferLen) { fz_stream *stream = nullptr; fz_try(m_context) { stream = fz_open_memory(m_context, buffer, bufferLen); } fz_catch(m_context) { return nullptr; } return stream; }
static void fz_decode_tiff_jpeg(struct tiff *tiff, fz_stream *chain, unsigned char *wp, int wlen) { fz_stream *stm; fz_stream *jpegtables = NULL; int color_transform = -1; /* unset */ if (tiff->jpegtables && (int)tiff->jpegtableslen > 0) jpegtables = fz_open_memory(tiff->ctx, tiff->jpegtables, (int)tiff->jpegtableslen); if (tiff->photometric == 2 /* RGB */ || tiff->photometric == 3 /* RGBPal */) color_transform = 0; stm = fz_open_dctd(chain, color_transform, 0, jpegtables); fz_read(stm, wp, wlen); fz_close(stm); }
void ViewerWidget::load(const QByteArray &data) { scene->clear(); QList<QGraphicsItem *> items; QPixmap pixmap; if (pixmap.loadFromData(data)) { items << new QGraphicsPixmapItem(pixmap); } else if (data.startsWith("%PDF")) { fz_stream *stream = fz_open_memory(context, (unsigned char *)data.constData(), data.length()); fz_document *doc = fz_open_document_with_stream(context, ".pdf", stream); fz_close(stream); int pagecount = fz_count_pages(doc); for (int i = 0; i < pagecount; i++) { fz_page *page = fz_load_page(doc, i); fz_rect bounds; fz_bound_page(doc, page, &bounds); fz_display_list *list = fz_new_display_list(context); fz_device *dev = fz_new_list_device(context, list); fz_run_page(doc, page, dev, &fz_identity, NULL); fz_free_device(dev); fz_free_page(doc, page); PageItem *item = new PageItem(context, list, bounds.x1 - bounds.x0, bounds.y1 - bounds.y0); item->setCacheMode(QGraphicsItem::DeviceCoordinateCache); items << item; } fz_close_document(doc); } else { scene->setSceneRect(0, 0, 0, 0); return; } int top = 0; QPen outline(Qt::lightGray, 2, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin); outline.setCosmetic(true); foreach (QGraphicsItem *item, items) { QGraphicsRectItem *rim = new QGraphicsRectItem(item->boundingRect()); item->setPos(0, top); rim->setPos(0, top); rim->setPen(outline); rim->setBrush(Qt::NoBrush); scene->addItem(rim); scene->addItem(item); top += item->boundingRect().height() + SPACING; }