php如何操作pdf文件_php生成和解析pdf文档

答案:PHP操作PDF依赖第三方库,生成常用Dompdf、TCPDF,解析多用Smalot/pdfparser。Dompdf适合HTML转PDF,支持动态数据嵌入、图片及字体(需配置),TCPDF适用于精确绘图,解析则面临文本顺序错乱、表格识别难等挑战,需结合OCR或外部工具处理扫描件和复杂布局。

php如何操作pdf文件_php生成和解析pdf文档

PHP操作PDF文件,无论是生成还是解析,主要依赖于第三方库。PHP本身并没有内置直接处理PDF的强大功能,但通过引入成熟的库,我们可以实现从简单的文本报告到复杂的动态PDF文档生成,以及从现有PDF中提取文本和数据。这其中,生成文档相对成熟且方案多样,而解析则复杂得多,需要根据具体需求和PDF结构来选择工具和策略。

生成PDF文档,通常我们会在服务器端通过PHP脚本将数据渲染成PDF格式。至于解析,则需要深入理解PDF的内部结构,并利用专门的解析库来抽取信息。这两种操作在实际项目中都非常常见,比如生成发票、报告,或者从收到的PDF文件中提取关键数据。

解决方案

在PHP中处理PDF文件,核心在于选择合适的第三方库。

PDF生成:对于PDF生成,我个人常用的是Dompdf和TCPDF。

Dompdf: 如果你的内容已经以HTML和CSS的形式存在,或者你可以很方便地将其组织成HTML,那么Dompdf是首选。它的优势在于,你几乎可以用前端开发的方式来设计PDF布局,因为它能将HTML/CSS渲染成PDF。这对于生成报表、合同、发票这类基于模板的文档非常方便。

立即学习“PHP免费学习笔记(深入)”;

set('defaultFont', 'SimHei'); // 假设你已经安装了SimHei字体$options->set('isHtml5ParserEnabled', true);$options->set('isRemoteEnabled', true); // 允许加载远程图片等资源$dompdf = new Dompdf($options);$html = '        我的PHP生成PDF            body { font-family: "SimHei", sans-serif; margin: 40px; }        h1 { color: #333; }        p { line-height: 1.6; }        .highlight { background-color: #f0f0f0; padding: 10px; border-radius: 5px; }        

欢迎来到我的PDF文档

这是一段由PHP和Dompdf生成的文本,包含一些加粗斜体的内容。

你也可以在这里嵌入动态数据,比如当前日期:' . date('Y-m-d H:i:s') . '

@@##@@';$dompdf->loadHtml($html);// 设置纸张大小和方向$dompdf->setPaper('A4', 'portrait'); // 'portrait' 竖向, 'landscape' 横向// 渲染HTML为PDF$dompdf->render();// 输出PDF到浏览器或保存到文件$dompdf->stream("my_document.pdf", ["Attachment" => false]); // Attachment为false表示在浏览器中预览// file_put_contents("my_document.pdf", $dompdf->output()); // 保存到文件?>

这里需要注意字体问题,特别是中文。Dompdf默认可能不支持某些中文字体,需要手动引入或配置。

TCPDF/FPDF: 如果你需要更底层的控制,比如精确绘制图形、线条、条形码,或者不需要HTML渲染的开销,那么TCPDF或FPDF是更好的选择。TCPDF功能更强大,支持Unicode、数字签名等,而FPDF则更轻量级,学习曲线也相对平缓。它们都是通过PHP代码直接“画”出PDF内容。

PDF解析:PDF解析通常比生成要复杂得多,因为PDF文件的结构是为了显示而设计的,而不是为了数据提取。

Smalot/pdfparser: 这是一个非常流行的PHP库,用于从PDF文件中提取文本、元数据和结构信息。它能处理大多数标准的PDF文件,但对于复杂的布局、表格或扫描件,可能会遇到挑战。

parseFile('path/to/your/document.pdf'); // 替换为你的PDF文件路径// 获取PDF的元数据$details = $pdf->getDetails();foreach ($details as $key => $value) {    if (is_array($value)) {        echo $key . ': ' . implode(', ', $value) . '
'; } else { echo $key . ': ' . $value . '
'; }}// 获取所有页面的文本$text = $pdf->getText();echo '

所有页面文本:

';echo '
' . htmlspecialchars($text) . '

';// 获取特定页面的文本$pages = $pdf->getPages();if (isset($pages[0])) { // 第一页 echo '

第一页文本:

'; echo '

' . htmlspecialchars($pages[0]->getText()) . '

';}?>

Smalot/pdfparser

在提取纯文本方面表现不错,但如果你需要提取表格数据或者处理复杂的布局,可能需要更多的自定义逻辑,甚至结合正则表达式或其他文本处理技术。

PHP生成PDF文档时,我应该选择哪种库?Dompdf、TCPDF还是FPDF?

选择PDF生成库,这确实是个让人头疼的问题,因为每种库都有其侧重点和适用场景。我通常会从我的“源数据”和“需求复杂性”这两个维度来考量。

首先,如果你手头已经有一套成熟的HTML/CSS模板,或者你的项目天然就是基于Web前端技术栈来构建内容,那么Dompdf几乎是你的不二之选。它的核心优势在于能够将HTML和CSS渲染成PDF。这意味着你可以利用你熟悉的前端技能,比如Flexbox、Grid布局(虽然Dompdf对CSS3的支持不如现代浏览器那么完善,但基本够用),甚至直接把网页内容稍作调整就生成PDF。对于生成像发票、报告、合同这类格式相对固定、内容动态填充的文档,Dompdf能大幅提升开发效率。我个人经验是,当客户对PDF的视觉效果有较高要求,且前端团队能够提供高质量的HTML模板时,Dompdf总能让我省心不少。不过,它也有缺点,比如对复杂CSS的支持有限,生成大型或复杂PDF时可能会有性能瓶颈,以及处理中文字体需要额外配置。

其次,如果你的需求是需要对PDF的每一个元素进行像素级的精确控制,比如绘制复杂的图表、条形码、二维码,或者需要处理数字签名、加密等高级功能,那么TCPDF会是更好的选择。TCPDF是一个功能非常强大的库,它直接通过PHP代码来“画”出PDF内容,提供了丰富的API来控制文本、图形、图片、表格的每一个细节。它的学习曲线相对陡峭一些,你需要习惯它特有的坐标系统和绘图方法。我记得有一次项目需要生成带有多种条形码和自定义水印的物流标签,Dompdf就显得力不从心了,最终还是TCPDF出色地完成了任务。它对Unicode的支持也非常好,处理多语言文档时更省心。

最后,如果你只是需要生成一些非常简单的、纯文本的PDF文档,对样式要求不高,或者项目对库的体积和性能有严格要求,那么FPDF可能就足够了。FPDF是一个非常轻量级的库,它的API相对简单直观,上手快。虽然功能不如TCPDF强大,但对于基础的文本输出、图片插入等操作,它能高效完成。我通常在一些内部工具或者数据导出功能中用到它,因为它足够简单,不会引入太多不必要的依赖。

总结一下我的选择逻辑:

HTML/CSS模板 -> Dompdf (省心,前端友好)精确控制/高级功能 -> TCPDF (强大,但学习成本高)简单/轻量级 -> FPDF (高效,基础功能)

没有哪个库是“最好的”,只有最适合你当前项目的。我建议在项目初期,根据你的主要需求和团队技能栈,先做个小范围的PoC(概念验证),看看哪个库能更顺畅地解决你的问题。

解析PDF文档在PHP中面临哪些常见挑战,有没有可靠的解决方案?

PHP解析PDF文档,这可比生成PDF要“硬核”得多,也更容易让人感到挫败。PDF文件格式的初衷是“所见即所得”,它更关注内容的显示效果,而非数据的结构化存储。这就导致了在PHP中进行PDF解析时,我们不得不面对一系列棘手的挑战。

最大的挑战莫过于PDF内部结构的复杂性和多样性。PDF文件可以由各种工具生成,每个工具在生成时可能都有自己独特的优化方式,比如字体嵌入、图片压缩、文本编码等。这使得PDF文件看起来千变万化。你可能会遇到:

文本提取困难: 这是最常见的痛点。PDF中的文本可能不是按阅读顺序存储的,而是根据排版需求分散在页面各处。比如,一个段落的文字可能被拆分成多个独立的文本块,甚至一个单词的字母都可能分开存储。更糟糕的是,字体嵌入、字符编码(如CID字体)问题,常常导致提取出的文本乱码或不完整。表格数据提取: 如果说文本提取是“难”,那表格提取就是“地狱模式”。PDF没有内置“表格”的概念,它只是通过线条和文本的位置来模拟表格。这意味着你需要通过复杂的算法去识别线条、文本块,然后推断出表格的行和列结构,这极其容易出错,尤其是在表格样式不规则、跨页或者有合并单元格的情况下。图片和图形提取: 虽然一些库可以提取图片,但通常只能得到原始图片文件,要理解图片内容则需要额外的图像识别技术。扫描件PDF: 如果PDF是扫描件,那里面根本就没有可供程序提取的文本,只有一张张图片。这时候,任何基于文本解析的库都无能为力,必须先进行OCR(光学字符识别)处理。内存和性能问题: 大型PDF文件,特别是包含大量图片或复杂矢量图形的,在解析时可能会消耗大量的内存和CPU资源,导致PHP脚本超时或内存溢出。

那么,有没有可靠的解决方案呢?我的经验是,没有一劳永逸的“银弹”,但我们可以结合多种策略和工具来应对。

对于文本和元数据提取

Smalot/pdfparser

无疑是PHP生态中最成熟和常用的开源库。它能很好地处理大部分标准PDF的文本和元数据。它会尝试将页面上的文本块重新组合,并处理一些常见的编码问题。对于大部分只需要获取PDF文字内容的应用场景,它是一个非常可靠的起点。但正如我前面提到的,对于复杂的排版,你可能需要对提取出的文本进行后处理,比如用正则表达式清理、重新排序。

对于表格数据提取,这通常需要更高级的工具,甚至结合机器学习。在PHP中,你可能需要:

自定义逻辑: 基于

Smalot/pdfparser

提取出的文本块及其坐标信息,尝试编写自己的算法来识别表格区域和单元格。这需要大量的试错和对特定PDF格式的深入理解。结合Python或Java工具: 像Python的

camelot

tabula-py

,或者Java的

PDFBox

,在表格提取方面通常有更强的能力。你可以在PHP中调用这些外部脚本或服务来处理PDF,然后将结果返回给PHP。这虽然增加了系统复杂度,但往往能获得更好的效果。商业API/SDK: 如果预算允许且需求严格,一些商业服务(如Adobe PDF Services API、PDFTron等)提供了非常强大的PDF解析能力,包括智能表格提取。它们通常会提供PHP的SDK或RESTful API。

对于扫描件PDF,唯一的可靠解决方案是OCR(光学字符识别)。你可以:

自建OCR服务: 使用

Tesseract

等开源OCR引擎,在服务器上部署,然后PHP调用命令行或封装成服务。云端OCR服务: 比如Google Cloud Vision AI、Amazon Textract、百度AI开放平台等,它们提供了强大的OCR能力,通过API调用即可。

性能优化方面,处理大型PDF时,可以考虑:

增加PHP内存限制和执行时间:

memory_limit

max_execution_time

分批处理: 如果PDF可以逻辑上拆分,尝试分批处理。异步处理: 对于非常大的文件,将PDF解析任务放入消息队列,由后台工作进程异步处理,避免阻塞前端请求。选择高效的库: Smalot/pdfparser已经相对高效,但对于极端的性能要求,可能需要考虑C/C++编写的PDF库(如Poppler),然后通过PHP扩展或外部调用来集成。

总而言之,PDF解析是一个充满挑战的领域。我的建议是,先用

Smalot/pdfparser

尝试,看它能解决多少问题。如果遇到瓶颈,特别是表格提取或扫描件,不要害怕引入外部工具或服务。设定切合实际的期望值也很重要,PDF解析很少能做到100%完美,尤其是在面对各种奇形怪状的PDF文件时。

如何在PHP生成的PDF中嵌入图片、字体和动态数据?

在PHP生成的PDF中嵌入图片、字体和动态数据,这是构建实用PDF文档的核心需求。无论你选择Dompdf、TCPDF还是FPDF,这些操作都是可以实现的,只是API和实现方式略有不同。我将主要以Dompdf和TCPDF为例,因为它们代表了两种不同的生成哲学。

嵌入动态数据:这通常是最直接和最简单的部分,因为PHP本身就是处理动态数据的。

Dompdf(HTML/CSS方式):你只需像构建普通HTML页面一样,将PHP变量直接插入到HTML字符串中即可。

 '商品A', 'qty' => 2, 'price' => 100],    ['name' => '商品B', 'qty' => 1, 'price' => 250],];$totalAmount = array_sum(array_map(fn($item) => $item['qty'] * $item['price'], $items));$html = '    

发票

客户姓名: ' . htmlspecialchars($userName) . '

发票编号: ' . htmlspecialchars($invoiceNumber) . '

';foreach ($items as $item) { $html .= ' ';}$html .= '
商品数量单价总计
' . htmlspecialchars($item['name']) . ' ' . htmlspecialchars($item['qty']) . ' ' . htmlspecialchars($item['price']) . ' ' . htmlspecialchars($item['qty'] * $item['price']) . '
总金额:' . htmlspecialchars($totalAmount) . '
';$dompdf->loadHtml($html);// ... 渲染和输出代码 ...?>

通过字符串拼接或模板引擎(如Twig、Blade)将PHP变量嵌入到HTML中,这是最常见且高效的方式。

TCPDF/FPDF(程序绘制方式):这些库提供

Cell()

Text()

等方法来输出文本。你直接将PHP变量作为参数传递给这些方法即可。

AddPage();$userName = "李四";$productName = "超级产品";$price = 99.99;$pdf->SetFont('dejavusans', '', 12); // 使用支持中文的字体$pdf->Write(0, '尊敬的客户 ' . $userName . ':', '', 0, 'L', true, 0, false, false, 0);$pdf->Ln(10); // 换行$pdf->Write(0, '您购买的商品是:' . $productName . ',价格为:' . $price . ' 元。', '', 0, 'L', true, 0, false, false, 0);// ... 输出PDF ...?>

嵌入图片:

Dompdf:和HTML中嵌入图片的方式完全一样,使用

@@##@@

标签。Dompdf可以处理本地图片路径和远程URL。

@@##@@@@##@@

需要注意的是,如果图片是本地路径,Dompdf需要能够访问到这个路径。对于远程图片,你需要确保

$options->set('isRemoteEnabled', true);

被设置为

true

TCPDF/FPDF:这些库提供了专门的

Image()

方法来插入图片,你可以精确控制图片的位置、大小和透明度等。

// TCPDF$pdf->Image('/path/to/your/logo.png', 15, 15, 30, 0, 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false);// 参数含义:文件路径, x, y, 宽度, 高度(0表示按比例), 类型, 链接, 对齐, 缩放, 边框, 忽略裁剪, 调整, 旋转, 透明度, 遮罩, 可视性// FPDF$pdf->Image('/path/to/your/header.jpg', 10, 10, 190);// 参数含义:文件路径, x, y, 宽度, 高度(可选), 类型(可选)

嵌入字体:字体是PDF生成中一个比较复杂但又非常重要的环节,特别是涉及中文。

Dompdf:Dompdf处理字体的方式与浏览器类似,通过CSS的

@font-face

规则。准备字体文件: 你需要TTF格式示例图片php如何操作pdf文件_php生成和解析pdf文档本地图片远程图片

以上就是php如何操作pdf文件_php生成和解析pdf文档的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1293511.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月11日 09:09:27
下一篇 2025年12月11日 09:09:33

相关推荐

  • CSS mask属性无法获取图片:为什么我的图片不见了?

    CSS mask属性无法获取图片 在使用CSS mask属性时,可能会遇到无法获取指定照片的情况。这个问题通常表现为: 网络面板中没有请求图片:尽管CSS代码中指定了图片地址,但网络面板中却找不到图片的请求记录。 问题原因: 此问题的可能原因是浏览器的兼容性问题。某些较旧版本的浏览器可能不支持CSS…

    2025年12月24日
    900
  • 如何用dom2img解决网页打印样式不显示的问题?

    用dom2img解决网页打印样式不显示的问题 想将网页以所见即打印的的效果呈现,需要采取一些措施,特别是在使用了bootstrap等大量采用外部css样式的框架时。 问题根源 在常规打印操作中,浏览器通常会忽略css样式等非必要的页面元素,导致打印出的结果与网页显示效果不一致。这是因为打印机制只识别…

    2025年12月24日
    800
  • 如何用 CSS 模拟不影响其他元素的链接移入效果?

    如何模拟 css 中链接的移入效果 在 css 中,模拟移入到指定链接的效果尤为复杂,因为链接的移入效果不影响其他元素。要实现这种效果,最简单的方法是利用放大,例如使用 scale 或 transform 元素的 scale 属性。下面提供两种方法: scale 属性: .goods-item:ho…

    2025年12月24日
    700
  • Uniapp 中如何不拉伸不裁剪地展示图片?

    灵活展示图片:如何不拉伸不裁剪 在界面设计中,常常需要以原尺寸展示用户上传的图片。本文将介绍一种在 uniapp 框架中实现该功能的简单方法。 对于不同尺寸的图片,可以采用以下处理方式: 极端宽高比:撑满屏幕宽度或高度,再等比缩放居中。非极端宽高比:居中显示,若能撑满则撑满。 然而,如果需要不拉伸不…

    2025年12月24日
    400
  • PC端H5项目如何实现适配:流式布局、响应式设计和两套样式?

    PC端的适配方案及PC与H5兼顾的实现方案探讨 在开发H5项目时,常用的屏幕适配方案是postcss-pxtorem或postcss-px-to-viewport,通常基于iPhone 6标准作为设计稿。但对于PC端网项目,处理不同屏幕大小需要其他方案。 PC端屏幕适配方案 PC端屏幕适配一般采用流…

    2025年12月24日
    300
  • CSS 元素设置 10em 和 transition 后为何没有放大效果?

    CSS 元素设置 10em 和 transition 后为何无放大效果? 你尝试设置了一个 .box 类,其中包含字体大小为 10em 和过渡持续时间为 2 秒的文本。当你载入到页面时,它没有像 YouTube 视频中那样产生放大效果。 原因可能在于你将 CSS 直接写在页面中 在你的代码示例中,C…

    2025年12月24日
    400
  • 如何实现类似横向U型步骤条的组件?

    横向U型步骤条寻求替代品 希望找到类似横向U型步骤条的组件或 CSS 实现。 潜在解决方案 根据给出的参考图片,类似的组件有: 图片所示组件:图片提供了组件的外观,但没有提供具体的实现方式。参考链接:提供的链接指向了 SegmentFault 上的另一个问题,其中可能包含相关的讨论或解决方案建议。 …

    2025年12月24日
    800
  • 如何让小说网站控制台显示乱码,同时网页内容正常显示?

    如何在不影响用户界面的情况下实现控制台乱码? 当在小说网站上下载小说时,大家可能会遇到一个问题:网站上的文本在网页内正常显示,但是在控制台中却是乱码。如何实现此类操作,从而在不影响用户界面(UI)的情况下保持控制台乱码呢? 答案在于使用自定义字体。网站可以通过在服务器端配置自定义字体,并通过在客户端…

    2025年12月24日
    800
  • 如何优化CSS Grid布局中子元素排列和宽度问题?

    css grid布局中的优化问题 在使用css grid布局时可能会遇到以下问题: 问题1:无法控制box1中li的布局 box1设置了grid-template-columns: repeat(auto-fill, 20%),这意味着容器将自动填充尽可能多的20%宽度的列。当li数量大于5时,它们…

    2025年12月24日
    800
  • SASS 中的 Mixins

    mixin 是 css 预处理器提供的工具,虽然它们不是可以被理解的函数,但它们的主要用途是重用代码。 不止一次,我们需要创建多个类来执行相同的操作,但更改单个值,例如字体大小的多个类。 .fs-10 { font-size: 10px;}.fs-20 { font-size: 20px;}.fs-…

    2025年12月24日
    000
  • 如何在地图上轻松创建气泡信息框?

    地图上气泡信息框的巧妙生成 地图上气泡信息框是一种常用的交互功能,它简便易用,能够为用户提供额外信息。本文将探讨如何借助地图库的功能轻松创建这一功能。 利用地图库的原生功能 大多数地图库,如高德地图,都提供了现成的信息窗体和右键菜单功能。这些功能可以通过以下途径实现: 高德地图 JS API 参考文…

    2025年12月24日
    400
  • 如何使用 scroll-behavior 属性实现元素scrollLeft变化时的平滑动画?

    如何实现元素scrollleft变化时的平滑动画效果? 在许多网页应用中,滚动容器的水平滚动条(scrollleft)需要频繁使用。为了让滚动动作更加自然,你希望给scrollleft的变化添加动画效果。 解决方案:scroll-behavior 属性 要实现scrollleft变化时的平滑动画效果…

    2025年12月24日
    000
  • CSS mask 属性无法加载图片:浏览器问题还是代码错误?

    CSS mask 属性请求图片失败 在使用 CSS mask 属性时,您遇到了一个问题,即图片没有被请求获取。这可能是由于以下原因: 浏览器问题:某些浏览器可能在处理 mask 属性时存在 bug。尝试更新到浏览器的最新版本。代码示例中的其他信息:您提供的代码示例中还包含其他 HTML 和 CSS …

    2025年12月24日
    000
  • 如何为滚动元素添加平滑过渡,使滚动条滑动时更自然流畅?

    给滚动元素平滑过渡 如何在滚动条属性(scrollleft)发生改变时为元素添加平滑的过渡效果? 解决方案:scroll-behavior 属性 为滚动容器设置 scroll-behavior 属性可以实现平滑滚动。 html 代码: click the button to slide right!…

    2025年12月24日
    500
  • 如何用 CSS 实现链接移入效果?

    css 中实现链接移入效果的技巧 在 css 中模拟链接的移入效果可能并不容易,因为它们不会影响周围元素。但是,有几个方法可以实现类似的效果: 1. 缩放 最简单的方法是使用 scale 属性,它会放大元素。以下是一个示例: 立即学习“前端免费学习笔记(深入)”; .goods-item:hover…

    2025年12月24日
    000
  • 网页使用本地字体:为什么 CSS 代码中明明指定了“荆南麦圆体”,页面却仍然显示“微软雅黑”?

    网页中使用本地字体 本文将解答如何将本地安装字体应用到网页中,避免使用 src 属性直接引入字体文件。 问题: 想要在网页上使用已安装的“荆南麦圆体”字体,但 css 代码中将其置于第一位的“font-family”属性,页面仍显示“微软雅黑”字体。 立即学习“前端免费学习笔记(深入)”; 答案: …

    2025年12月24日
    000
  • 如何选择元素个数不固定的指定类名子元素?

    灵活选择元素个数不固定的指定类名子元素 在网页布局中,有时需要选择特定类名的子元素,但这些元素的数量并不固定。例如,下面这段 html 代码中,activebar 和 item 元素的数量均不固定: *n *n 如果需要选择第一个 item元素,可以使用 css 选择器 :nth-child()。该…

    2025年12月24日
    200
  • 如何用 CSS 实现类似卡券的缺口效果?

    类似卡券的布局如何实现 想要实现类似卡券的布局,可以使用遮罩(mask)来实现缺口效果。 示例代码: .card { -webkit-mask: radial-gradient(circle at 20px, #0000 20px, red 0) -20px;} 效果: 立即学习“前端免费学习笔记(…

    2025年12月24日
    000
  • 如何用纯代码实现自定义宽度和间距的虚线边框?

    自定义宽度和间距的虚线边框 提问: 如何创建一个自定义宽度和间距的虚线边框,如下图所示: 元素宽度:8px元素高度:1px间距:2px圆角:4px 解答: 传统的解决方案通常涉及使用 border-image 引入切片的图片来实现。但是,这需要引入外部资源。本解答将提供一种纯代码的方法,使用 svg…

    2025年12月24日
    000
  • PC端、PC兼响应式H5项目,如何选择最佳适配方案?

    多屏适配:PC端、PC兼响应式H5项目解决方案 针对PC端的网页适配,业界普遍采用以下方案: 流媒体查询:根据设备屏幕宽度应用不同的样式表,实现不同屏幕尺寸的适配。栅格系统:将布局划分为多个网格,根据屏幕宽度调整网格的显示和隐藏,实现自适应布局。 一般情况下,设计师设计PC页面时,会以特定像素宽度为…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信