-
-
文档
-
-
-
-
-
-
-
+
-
系统字体未授权
+
系统字体未授权
diff --git a/assets/webui/ofdgo.css b/assets/webui/ofdgo.css
index 839a04e..9b95444 100644
--- a/assets/webui/ofdgo.css
+++ b/assets/webui/ofdgo.css
@@ -1885,43 +1885,6 @@ body[data-hide-meta] .meta-panel {
border-left: 1px solid var(--line);
}
-.meta-panel[data-empty="true"] #metaDocumentPanel {
- display: none;
-}
-
-.meta-panel[data-empty="true"] > .font-panel {
- margin-top: 0;
- padding-top: 0;
- border-top: 0;
-}
-
-.meta-panel .panel-row {
- display: grid;
- grid-template-columns: auto minmax(0, 1fr);
- align-items: start;
- margin-bottom: 8px;
-}
-
-.meta-panel .panel-title {
- display: flex;
- align-items: center;
- min-height: 26px;
-}
-
-.meta-panel .panel-actions {
- min-width: 0;
- justify-self: end;
-}
-
-.meta-panel .count-pill {
- justify-self: end;
- max-width: 100%;
- min-height: 26px;
- height: auto;
- white-space: normal;
- overflow-wrap: anywhere;
-}
-
.panel-title {
margin-bottom: 10px;
font-size: 12px;
@@ -3833,52 +3796,24 @@ audio.page-media {
.meta-list {
display: grid;
- gap: 8px;
+ gap: 12px;
margin: 0;
- font-size: 12px;
- line-height: 1.5;
}
-.meta-list > div {
+.meta-list div {
display: grid;
- grid-template-columns: 4em minmax(0, 1fr);
- align-items: start;
- gap: 8px;
-}
-
-.security-panel .meta-list > div {
- grid-template-columns: 2em minmax(0, 1fr);
+ gap: 3px;
}
.meta-list dt {
+ font-size: 12px;
color: var(--text-muted);
- overflow-wrap: anywhere;
-}
-
-.meta-list:not(#metaCustomData) dt {
- white-space: nowrap;
}
.meta-list dd {
margin: 0;
overflow-wrap: anywhere;
- white-space: pre-wrap;
-}
-
-.document-info .meta-list:not(#metaCustomData) dt {
- text-align-last: justify;
-}
-
-.document-info details:not(:has(.meta-list > div:not([hidden]))) {
- display: none;
-}
-
-.document-info details[open] > .meta-list {
- margin-top: 8px;
-}
-
-#metaKeywords > span {
- display: block;
+ line-height: 1.35;
}
.font-panel,
@@ -3886,7 +3821,7 @@ audio.page-media {
.signature-panel,
.structure-panel,
.security-panel {
- margin-top: 12px;
+ margin-top: 18px;
padding-top: 12px;
border-top: 1px solid var(--line);
}
@@ -3930,7 +3865,6 @@ audio.page-media {
gap: 8px;
}
-.document-info,
.doc-font-row,
.signature-row {
display: grid;
@@ -4125,19 +4059,16 @@ audio.page-media {
.meta-panel .info-line {
grid-template-columns: 4em minmax(0, 1fr);
- gap: 8px;
}
-.signature-row .info-label {
+.meta-panel .info-label {
text-align-last: justify;
}
-.document-info details,
.signature-row details {
font-size: 12px;
}
-.document-info summary,
.signature-row summary {
cursor: pointer;
color: var(--accent-strong);
diff --git a/assets/webui/ofdgo.js b/assets/webui/ofdgo.js
index a741cb6..7a366a6 100644
--- a/assets/webui/ofdgo.js
+++ b/assets/webui/ofdgo.js
@@ -597,20 +597,13 @@ const el = {
refreshAppButton: document.querySelector("#refreshAppButton"),
metaFile: document.querySelector("#metaFile"),
metaTitle: document.querySelector("#metaTitle"),
- metaAuthor: document.querySelector("#metaAuthor"),
+ conversionNotice: document.querySelector("#conversionNotice"),
+ conversionWarnings: document.querySelector("#conversionWarnings"),
metaSubject: document.querySelector("#metaSubject"),
- metaAbstract: document.querySelector("#metaAbstract"),
- metaKeywords: document.querySelector("#metaKeywords"),
+ metaAuthor: document.querySelector("#metaAuthor"),
metaCreationDate: document.querySelector("#metaCreationDate"),
metaModDate: document.querySelector("#metaModDate"),
metaCreator: document.querySelector("#metaCreator"),
- metaCreatorVersion: document.querySelector("#metaCreatorVersion"),
- metaDocId: document.querySelector("#metaDocId"),
- metaDocUsage: document.querySelector("#metaDocUsage"),
- metaCover: document.querySelector("#metaCover"),
- metaCustomData: document.querySelector("#metaCustomData"),
- conversionNotice: document.querySelector("#conversionNotice"),
- conversionWarnings: document.querySelector("#conversionWarnings"),
metaType: document.querySelector("#metaType"),
metaVersion: document.querySelector("#metaVersion"),
metaSignatures: document.querySelector("#metaSignatures"),
@@ -665,7 +658,6 @@ const el = {
annotationClose: document.querySelector("#annotationClose"),
annotationSubmit: document.querySelector("#annotationSubmit"),
annotationDetail: document.querySelector("#annotationDetail"),
- docFontPanel: document.querySelector("#docFontPanel"),
docFontList: document.querySelector("#docFontList"),
docFontSummary: document.querySelector("#docFontSummary"),
availableFontSummary: document.querySelector("#availableFontSummary"),
@@ -2944,6 +2936,7 @@ async function mountDocumentTab(tab) {
if (view?.anchor) restoreScaleAnchor(view.anchor);
showNavigation(view?.navigation || el.pagesTab);
el.navigationContent.scrollTop = view?.navigationTop || 0;
+ el.metaPanel.scrollTop = view?.metaTop || 0;
canvasEditor.setTool(view?.tool || "");
} else {
renderPageList();
@@ -2954,7 +2947,6 @@ async function mountDocumentTab(tab) {
}
renderFontList();
updateFontSummary();
- el.metaPanel.scrollTop = tab.view?.metaTop || 0;
updateControls();
tab.controlsPending = false;
setStatus(tab.status);
@@ -12638,43 +12630,23 @@ function renderMeta(keepDetails = false) {
el.metaPanel.setAttribute("data-busy", String(!!doc.detailsPending));
document.title = `${nativeHost ? "OFDGo" : "OFDGo WebUI"} - ${state.doc ? state.fileName : "OFD编辑器"}`;
el.metaFile.textContent = state.doc ? state.fileName : "-";
+ el.metaTitle.textContent = doc.title || "-";
+ el.metaAuthor.textContent = doc.author || "-";
for (const [field, value] of [
- [el.metaTitle, doc.title || ""],
- [el.metaAuthor, doc.author || ""],
- [el.metaSubject, doc.subject || ""],
- [el.metaAbstract, doc.abstract || ""],
+ [el.metaSubject, (doc.subject || "").trim()],
[el.metaCreationDate, formatDocumentTime(doc.creationDate)],
[el.metaModDate, formatDocumentTime(doc.modDate)],
- [el.metaCreator, doc.creator || ""],
- [el.metaCreatorVersion, doc.creatorVersion || ""],
- [el.metaDocId, doc.docId || ""],
- [el.metaDocUsage, doc.docUsage || ""],
- [el.metaCover, doc.cover || ""],
- [el.metaType, doc.docType || ""],
- [el.metaVersion, doc.version || ""],
+ [el.metaCreator, [doc.creator, doc.creatorVersion].filter(Boolean).join(" ")],
]) {
field.textContent = value;
field.parentElement.hidden = !value;
}
- el.metaKeywords.replaceChildren(...(doc.keywords || []).map(keyword => {
- const item = document.createElement("span");
- item.textContent = keyword || "-";
- return item;
- }));
- el.metaKeywords.parentElement.hidden = !doc.keywords?.length;
- el.metaCustomData.replaceChildren(...(doc.customData || []).map(field => {
- const row = document.createElement("div"), name = document.createElement("dt"), value = document.createElement("dd");
- name.textContent = field.Name || "-";
- value.textContent = field.Value || "-";
- row.append(name, value);
- return row;
- }));
- el.metaCustomData.hidden = !doc.customData?.length;
+ el.metaType.textContent = doc.docType || "-";
+ el.metaVersion.textContent = doc.version || "-";
+ el.metaFonts.textContent = String(doc.fontCount || 0);
el.pageTotal.textContent = String(doc.pageCount || 0);
if (keepDetails && doc.detailsPending) return;
- const detailsStatus = doc.detailsPending ? "读取中" : doc.detailsError ? "读取失败" : "";
- el.metaSignatures.textContent = detailsStatus || String(doc.signatureCount || 0);
- el.metaFonts.textContent = detailsStatus || String(doc.fontCount || 0);
+ el.metaSignatures.textContent = doc.detailsPending ? "正在检查签名" : doc.detailsError ? "读取失败" : String(doc.signatureCount || 0);
renderMetaContent(el.signatureList, [doc.signatures, doc.signatureError], renderSignatures);
updateStructureControls();
renderMetaContent(el.docFontList, doc.fonts || [], renderDocumentFonts);
@@ -13266,10 +13238,15 @@ function mountAnnotationNotes(index, surface, annotations) {
function renderDocumentFonts() {
const fonts = state.doc?.fonts || [];
- el.docFontPanel.hidden = !fonts.length;
el.docFontList.replaceChildren();
el.docFontSummary.textContent = fontSummary(fonts);
- if (!fonts.length) return;
+ if (!fonts.length) {
+ const empty = document.createElement("div");
+ empty.className = "font-empty";
+ empty.textContent = "暂无字体";
+ el.docFontList.append(empty);
+ return;
+ }
const fragment = document.createDocumentFragment();
for (const font of fonts) {
const row = document.createElement("div");
@@ -13718,7 +13695,6 @@ function updateInvoiceControl(disabled) {
function updateDocumentControls() {
const count = state.doc?.documents?.length || 0, index = managedDocumentIndex(), manager = state.documentManagement;
- el.metaPanel.setAttribute("data-empty", String(!state.doc));
const busy = document.body.hasAttribute("data-busy");
const disabled = !state.doc || !state.ready || state.exporting || busy;
el.printButton.disabled = disabled;