You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Processing Java导出PDF仅显示单个盒子的问题咨询

问题分析与修复

你的代码导出PDF时只显示单个盒子,核心问题有两个:

  1. endRaw() 位置错误:你把关闭PDF的代码放在了嵌套循环内部,导致画完第一个盒子就立即关闭了PDF文件,后续的盒子根本没机会写入到PDF里。
  2. 样式设置顺序颠倒:fill() 和 strokeWeight() 放在了 box() 之后,Processing 绘制图形时会使用当前已有的样式,所以这些设置不会作用到你画的盒子上。

以下是修复后的代码:

import processing.pdf.*;
int ofs = 500;

boolean record;

void setup() {
  size(1900, 1080, P3D);
}

void draw() {
  if (record) {
    beginRaw(PDF, "box.pdf");
  }

  background(255);
  translate(width/2, height/2, -800);
  
  rotateZ(0.3);
  rotateY(frameCount/500.0);
  float x = sin(radians(frameCount*0.1));
  
  // 先设置样式,再绘制图形
  fill(155, 150, 90);
  strokeWeight(3*x);
  
  for (int xo = -ofs; xo <= ofs; xo += 100) {
    for (int yo = -ofs; yo <= ofs; yo += 100) {
      pushMatrix();
      translate(xo, yo, 0);
      box(200*x);
      popMatrix();
    }
  }

  // 所有图形绘制完成后再关闭PDF
  if (record) {
    endRaw();
    record = false;
  }
}

void keyPressed() {
  if (key == 'r') {
    record = true;
  }
}

关键修改说明:

  • 将 endRaw() 和 record = false 移到了嵌套循环的外面,确保所有盒子都绘制完成后再关闭PDF文件。
  • 把 fill() 和 strokeWeight() 移到了循环之前,保证绘制每个盒子时都能应用正确的样式。
  • 调整了代码缩进,让逻辑结构更清晰。

这样修改后,按 r 键导出PDF时,就能完整保存当前帧所有的盒子了。

内容的提问来源于stack exchange,提问作者prof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 01:30:58