formsurgery: fallback bytes tho khi stream khong nen (decompressed_content cua lopdf bao loi thieu /Filter voi stream khong nen)
Build Windows portable / build (push) Canceled after 0s
Build Windows portable / build (push) Canceled after 0s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -36,6 +36,15 @@ fn is_text_show(op: &str) -> bool {
|
|||||||
matches!(op, "Tj" | "TJ" | "'" | "\"")
|
matches!(op, "Tj" | "TJ" | "'" | "\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Bytes content của stream: giải nén nếu có filter; stream KHÔNG nén thì
|
||||||
|
/// `decompressed_content()` của lopdf báo lỗi thiếu /Filter → dùng bytes thô.
|
||||||
|
/// (Bytes sai kiểu sẽ bị bất biến kiểm đếm chặn ở bước sau.)
|
||||||
|
fn stream_bytes(stream: &lopdf::Stream) -> Vec<u8> {
|
||||||
|
stream
|
||||||
|
.decompressed_content()
|
||||||
|
.unwrap_or_else(|_| stream.content.clone())
|
||||||
|
}
|
||||||
|
|
||||||
/// Resolve reference (tối đa 8 nấc).
|
/// Resolve reference (tối đa 8 nấc).
|
||||||
fn deref<'a>(doc: &'a LoDoc, mut o: &'a Object) -> &'a Object {
|
fn deref<'a>(doc: &'a LoDoc, mut o: &'a Object) -> &'a Object {
|
||||||
for _ in 0..8 {
|
for _ in 0..8 {
|
||||||
@@ -147,7 +156,7 @@ pub(crate) fn delete_form_text_ops(
|
|||||||
.map_err(le)?
|
.map_err(le)?
|
||||||
.as_stream()
|
.as_stream()
|
||||||
.map_err(le)?;
|
.map_err(le)?;
|
||||||
let bytes = stream.decompressed_content().map_err(le)?;
|
let bytes = stream_bytes(stream);
|
||||||
content = Content::decode(&bytes).map_err(le)?;
|
content = Content::decode(&bytes).map_err(le)?;
|
||||||
res = stream_resources(&doc, id, res.as_ref()).cloned();
|
res = stream_resources(&doc, id, res.as_ref()).cloned();
|
||||||
stream_id = Some(id);
|
stream_id = Some(id);
|
||||||
@@ -169,7 +178,7 @@ pub(crate) fn delete_form_text_ops(
|
|||||||
.map_err(le)?
|
.map_err(le)?
|
||||||
.as_stream()
|
.as_stream()
|
||||||
.map_err(le)?;
|
.map_err(le)?;
|
||||||
stream.decompressed_content().map_err(le)?
|
stream_bytes(stream)
|
||||||
};
|
};
|
||||||
let content = Content::decode(&bytes).map_err(le)?;
|
let content = Content::decode(&bytes).map_err(le)?;
|
||||||
let total_shows = content
|
let total_shows = content
|
||||||
|
|||||||
Reference in New Issue
Block a user