initial commit
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
#pragma once
|
||||
#include <QByteArray>
|
||||
#include <QList>
|
||||
|
||||
// The only text/font is beyond the worker's initial 256-page metadata batch.
|
||||
// This permits a real late font RPC, after a complete initial viewport exists.
|
||||
inline QByteArray deferredFontPdf() {
|
||||
QList<QByteArray> objects{"<< /Type /Catalog /Pages 2 0 R >>", QByteArray{},
|
||||
"<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>"};
|
||||
QByteArray kids;
|
||||
for (int page = 0; page < 257; ++page) {
|
||||
const int pageId = objects.size() + 1, streamId = pageId + 1;
|
||||
kids += QByteArray::number(pageId) + " 0 R ";
|
||||
objects << "<< /Type /Page /Parent 2 0 R /MediaBox [0 0 595 842] /Resources << /Font << /F1 3 0 R >> >> /Contents "
|
||||
+ QByteArray::number(streamId) + " 0 R >>";
|
||||
const QByteArray content = page == 256 ? "BT /F1 24 Tf 40 700 Td (Late font) Tj ET\n" : "0.1 0.3 0.7 rg 40 40 500 740 re f\n";
|
||||
objects << "<< /Length " + QByteArray::number(content.size()) + " >>\nstream\n" + content + "endstream";
|
||||
}
|
||||
objects[1] = "<< /Type /Pages /Count 257 /Kids [" + kids + "] >>";
|
||||
QByteArray result = "%PDF-1.7\n"; QList<qsizetype> offsets{0};
|
||||
for (qsizetype i = 0; i < objects.size(); ++i) {
|
||||
offsets.append(result.size()); result += QByteArray::number(i + 1) + " 0 obj\n" + objects[i] + "\nendobj\n";
|
||||
}
|
||||
const auto xref = result.size();
|
||||
result += "xref\n0 " + QByteArray::number(offsets.size()) + "\n0000000000 65535 f \n";
|
||||
for (qsizetype i = 1; i < offsets.size(); ++i) result += QByteArray::number(offsets[i]).rightJustified(10, '0') + " 00000 n \n";
|
||||
result += "trailer\n<< /Size " + QByteArray::number(offsets.size()) + " /Root 1 0 R >>\nstartxref\n" + QByteArray::number(xref) + "\n%%EOF\n";
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user