Renderer.OnBecameVisible

本文详细解释了Unity引擎中两个重要的生命周期事件——OnBecameVisible和OnBecameInvisible,阐述了它们在游戏开发中的作用及如何在代码中应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Renderer.OnBecameVisible
Renderer.OnBecameInvisible

容易遗忘的两事件

例子:

// Enables the behaviour when it is visible
function OnBecameVisible() {
enabled = true;
}

 
当在摄影机视线内/视线外 时候触发此事件

 

<think>我们正在使用FlyingSaucer(xhtmlrenderer)的ITextRenderer将HTML转换为PDF。用户的问题:如何设置A3页面大小进行布局?根据引用[1]中的示例,在HTML中可以通过CSS的@page规则设置页面大小,例如:@page{size:a3}。同时,在Java代码中,我们也可以在布局之前使用`renderer.layout()`方法的重载版本,传入一个自定义的页面尺寸。具体步骤:1.在HTML的CSS中定义@page规则(可选,但推荐同时设置以确保样式一致性)2.在Java代码中,使用`renderer.layout(PageSizepageSize)`方法,传入A3对应的PageSize对象。注意:A3纸张的尺寸是297mmx420mm,转换为点(points)是:842点x1191点(因为1英寸=25.4毫米,1英寸=72点,所以297毫米=297/25.4*72≈842点,420毫米=420/25.4*72≈1191点)。我们可以使用已经定义好的常量:`PageSize.A3`,它就是一个宽为1191,高为842的页面(注意:在PDF中,默认是纵向,即宽度小于高度。但A3的实际尺寸是宽297mm,高420mm,但在纵向模式下,我们将其视为高420mm,宽297mm,所以PageSize.A3常量的高度是842,宽度是1191?实际上,我们通常将A3纵向放置时,高度大于宽度,所以PageSize.A3的常量值应该是高度1191,宽度842?这里需要澄清)。实际上,在iText中(FlyingSaucer内部使用iText),PageSize类中定义的A3常量是:publicstaticfinalRectangleA3=newRectangleReadOnly(842,1191);注意:这里的Rectangle构造参数是:宽度(width)和高度(height)。所以,A3纵向时,宽度为842点(297mm),高度为1191点(420mm)。但是,我们通常认为A3的尺寸是420mm×297mm,即纵向时高度为420mm(1191点),宽度为297mm(842点)。所以,这个定义是正确的。然而,在CSS中,我们使用@page设置size:a3时,默认也是纵向。如果我们想要横向,可以使用size:A3landscape。在Java代码中,如果我们想要横向,可以这样:PageSizepageSize=PageSize.A3.rotate();这样就会变成宽度1191点,高度842点。因此,在代码中设置A3页面尺寸的步骤:1.创建ITextRenderer实例。2.设置文档(通过文件或字符串)。3.调用layout方法时传入PageSize.A3(纵向)或PageSize.A3.rotate()(横向)。同时,为了确保HTML中的样式与设置一致,建议在HTML的CSS中也定义@page规则。示例代码:```javaimportorg.xhtmlrenderer.pdf.ITextRenderer;importcom.lowagie.text.PageSize;importjava.io.*;publicclassHtmlToPdfA3{publicstaticvoidconvertToA3(StringhtmlPath,StringpdfPath)throwsException{ITextRendererrenderer=newITextRenderer();//设置文档(这里使用文件,也可以使用setDocumentFromString)FilehtmlFile=newFile(htmlPath);renderer.setDocument(htmlFile);//设置A3页面大小,纵向renderer.layout(PageSize.A3);//输出PDFtry(FileOutputStreamfos=newFileOutputStream(pdfPath)){renderer.createPDF(fos);}renderer.finishPDF();System.out.println("PDF生成成功,A3尺寸,纵向");}//如果需要横向publicstaticvoidconvertToA3Landscape(StringhtmlPath,StringpdfPath)throwsException{ITextRendererrenderer=newITextRenderer();renderer.setDocument(newFile(htmlPath));//使用A3横向renderer.layout(PageSize.A3.rotate());try(FileOutputStreamfos=newFileOutputStream(pdfPath)){renderer.createPDF(fos);}renderer.finishPDF();System.out.println("PDF生成成功,A3尺寸,横向");}}```同时,在HTML的CSS中,可以这样写(可选,但有助于在浏览器中查看时也符合预期):```css<style>@page{size:a3;/*纵向*//*如果要横向:size:a3landscape;*/}</style>```注意:CSS中的设置和Java代码中的设置可能会相互影响。如果两者都设置,以Java代码中传入的PageSize为准(因为layout方法会覆盖CSS的设置)。但是为了在HTML预览时也能看到正确的页面尺寸,建议同时设置CSS。另外,关于中文乱码问题,引用[1]中提到了需要添加中文字体,并在CSS中设置字体。请确保已经按照引用[1]的方法添加了中文字体。总结:-使用`renderer.layout(PageSize.A3)`设置纵向A3-使用`renderer.layout(PageSize.A3.rotate())`设置横向A3这样,生成的PDF页面大小就是A3了。参考文献:[^1]</think># 使用 ITextRenderer 设置 A3 页面大小进行布局 在 Flying Saucer (xhtmlrenderer) 中设置 A3 页面大小进行布局有两种主要方式:通过 CSS 样式或直接在 Java 代码中设置。 ## 方法一:通过 CSS 设置 A3 页面大小 在 HTML 文件中添加 CSS 样式声明: ```html <!DOCTYPE html> <html> <head> <style> /* 设置 A3 页面大小 */ @page { size: A3; margin: 1cm; } /* 解决中文显示问题 */ body { font-family: SimSun; } </style> </head> <body> <!-- 页面内容 --> <h1>A3 页面示例</h1> <p>这是一个使用 A3 纸张大小的 PDF 示例文档...</p> </body> </html> ``` 然后在 Java 代码中正常处理: ```java import org.xhtmlrenderer.pdf.ITextRenderer; import java.io.*; public class HtmlToPdfA3 { public static void convertToA3(String htmlPath, String pdfPath) throws Exception { ITextRenderer renderer = new ITextRenderer(); // 解决中文显示问题 String chineseFontPath = "fonts/simhei.ttf"; renderer.getFontResolver().addFont(chineseFontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); // 设置文档 renderer.setDocument(new File(htmlPath)); // 布局和生成 PDF renderer.layout(); try (FileOutputStream fos = new FileOutputStream(pdfPath)) { renderer.createPDF(fos); } renderer.finishPDF(); System.out.println("A3 PDF 生成成功: " + pdfPath); } } ``` ## 方法二:在 Java 代码中直接设置 A3 尺寸 ```java import org.xhtmlrenderer.pdf.ITextRenderer; import com.lowagie.text.PageSize; import java.io.*; public class HtmlToPdfA3 { public static void convertToA3(String htmlPath, String pdfPath) throws Exception { ITextRenderer renderer = new ITextRenderer(); // 解决中文显示问题 String chineseFontPath = "fonts/simhei.ttf"; renderer.getFontResolver().addFont(chineseFontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); // 设置文档 renderer.setDocument(new File(htmlPath)); // 直接设置 A3 页面尺寸 (297mm × 420mm) // 转换为点单位:1mm ≈ 2.83465 点 // float width = 297 * 2.83465f; // ≈ 841.89 // float height = 420 * 2.83465f; // ≈ 1190.55 // renderer.layout(new PageSize(width, height)); // 或者使用预定义的 A3 常量 renderer.layout(PageSize.A3); // 生成 PDF try (FileOutputStream fos = new FileOutputStream(pdfPath)) { renderer.createPDF(fos); } renderer.finishPDF(); System.out.println("A3 PDF 生成成功: " + pdfPath); } } ``` ## A3 页面尺寸说明 A3 纸张的标准尺寸为: - 宽度:297 毫米 - 高度:420 毫米 转换为点单位(1 英寸 = 25.4 毫米,1 英寸 = 72 点): - 宽度:297 / 25.4 * 72 ≈ 841.89 点 - 高度:420 / 25.4 * 72 ≈ 1190.55 点 Flying Saucer 的 `PageSize.A3` 常量已经包含了这些精确值[^1]。 ## 注意事项 1. **方向控制**: - 纵向:`PageSize.A3` - 横向:`PageSize.A3.rotate()` 2. **边距设置**: 在 CSS 中使用 `@page { margin: ... }` 或通过代码设置: ```java renderer.setDocument(document); renderer.getSharedContext().setMarginTop(40); // 单位:点 renderer.getSharedContext().setMarginBottom(40); renderer.layout(PageSize.A3); ``` 3. **内容适配**: A3 页面比 A4 更大,确保内容布局合理,避免元素过于分散或拥挤。 4. **中文支持**: 务必添加中文字体支持,否则中文内容将无法正常显示[^1]。 > 推荐同时使用 CSS 和 Java 代码设置页面尺寸,以确保在不同场景下的一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值