示例#1
0
文件: xps-doc.c 项目: krytikul/nPDF
void
xps_read_page_list(fz_context *ctx, xps_document *doc)
{
	xps_fixdoc *fixdoc;

	xps_read_and_process_metadata_part(ctx, doc, "/_rels/.rels", NULL);

	if (!doc->start_part)
		fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find fixed document sequence start part");

	xps_read_and_process_metadata_part(ctx, doc, doc->start_part, NULL);

	for (fixdoc = doc->first_fixdoc; fixdoc; fixdoc = fixdoc->next)
	{
		char relbuf[1024];
		fz_try(ctx)
		{
			xps_rels_for_part(ctx, doc, relbuf, fixdoc->name, sizeof relbuf);
			xps_read_and_process_metadata_part(ctx, doc, relbuf, fixdoc);
		}
		fz_catch(ctx)
		{
			fz_rethrow_if(ctx, FZ_ERROR_TRYLATER);
			fz_warn(ctx, "cannot process FixedDocument rels part");
		}
		xps_read_and_process_metadata_part(ctx, doc, fixdoc->name, fixdoc);
	}
}
示例#2
0
int
xps_read_page_list(xps_context *ctx)
{
	xps_document *doc;
	int code;

	code = xps_read_and_process_metadata_part(ctx, "/_rels/.rels");
	if (code)
		return fz_rethrow(code, "cannot process root relationship part");

	if (!ctx->start_part)
		return fz_throw("cannot find fixed document sequence start part");

	code = xps_read_and_process_metadata_part(ctx, ctx->start_part);
	if (code)
		return fz_rethrow(code, "cannot process FixedDocumentSequence part");

	for (doc = ctx->first_fixdoc; doc; doc = doc->next)
	{
		code = xps_read_and_process_metadata_part(ctx, doc->name);
		if (code)
			return fz_rethrow(code, "cannot process FixedDocument part");
	}

	return fz_okay;
}